java getNumberOfCameras()始终返回0
我对Android摄像头API有问题。我调试是因为
camera=Camera.open()
在安卓中配置权限时,始终返回null。舱单,后摄像头可用
所以我检查了Android的可用性和找到的摄像头数量:
Context context = getContext();
boolean b = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
int count = getNumberOfCameras();
camera = getCameraInstance();
Boolean b
(检查设备是否有摄像头)returns true
,如预期。
但是与此同时,count
(获取可用摄像机的数量)returns 0
我的java类:
package com.example.wouter.zytholog;
import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.content.pm.PackageManager;
import 安卓.hardware.Camera;
import 安卓.os.Bundle;
import 安卓.support.annotation.NonNull;
import 安卓.support.annotation.Nullable;
import 安卓.support.v4.app.ActivityCompat;
import 安卓.support.v4.app.Fragment;
import 安卓.view.LayoutInflater;
import 安卓.view.SurfaceHolder;
import 安卓.view.SurfaceView;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.Button;
import 安卓.widget.Toast;
import java.io.IOException;
import java.util.List;
import static 安卓.hardware.Camera.*;
/**
* Created by wouter on 3/04/2018.
*/
public class CameraFragment extends Fragment implements SurfaceHolder.Callback {
static Camera camera = null;
PictureCallback mCallback;
Button mCaptureBtn;
SurfaceHolder mHolder;
SurfaceView mView;
final int CAMERA_REQUEST_CODE = 1;
public static CameraFragment newInstance(){
CameraFragment fragment = new CameraFragment();
return fragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_camera, container, false);
mView = view.findViewById(R.id.surfaceView);
mHolder = mView.getHolder();
if(ActivityCompat.checkSelfPermission(getContext(),安卓.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(getActivity(), new String[] {安卓.Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
}
else{
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
mCaptureBtn = view.findViewById(R.id.capture);
mCaptureBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
capture();
}
});
mCallback = new PictureCallback() {
@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
Intent i = new Intent(getActivity(), showBeerActivity.class);
i.putExtra("capture", bytes);
startActivity(i);
return;
}
};
Context context = getContext();
boolean b = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
int count = getNumberOfCameras();
camera = getCameraInstance();
return view;
}
private void capture() {
camera.takePicture(null,null,mCallback);
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
}
private Camera getCameraInstance() {
Camera c = null;
try{
c= open();
}
catch(Exception e){
}
return c; //returns null if camera is not available
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch(requestCode){
case CAMERA_REQUEST_CODE:{
if(grantResults.length >0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}else{
Toast.makeText(getContext(), "Please give us permission to the camera", Toast.LENGTH_LONG).show();
}
break;
}
}
}
}
安卓。舱单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
package="com.example.wouter.zytholog">
<uses-permission 安卓:name="安卓.permission.CAMERA" />
<uses-permission 安卓:name="安卓.permission.INTERNET" />
<uses-feature 安卓:name="安卓.hardware.camera" />
<uses-feature 安卓:name="安卓.hardware.camera.autofocus" />
<application
安卓:allowBackup="true"
安卓:icon="@mipmap/ic_launcher"
安卓:label="@string/app_name"
安卓:roundIcon="@mipmap/ic_launcher_round"
安卓:supportsRtl="true"
安卓:theme="@style/AppTheme">
<activity 安卓:name=".LogoScreenActivity">
<intent-filter>
<action 安卓:name="安卓.intent.action.MAIN" />
<category 安卓:name="安卓.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity 安卓:name=".MainActivity" />
<activity 安卓:name=".LoginOrRegisterActivity" />
<activity 安卓:name=".LoginActivity" />
<activity 安卓:name=".RegisterActivity" />
<activity 安卓:name=".showBeerActivity"></activity>
</application>
</manifest>
# 1 楼答案
# 2 楼答案
getnumberofcameras是静态方法,请尝试将其用作