有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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>

共 (2) 个答案

  1. # 1 楼答案

    private CameraManager mManager;
    private String[] mCameraIds;
    mManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
    mCameraIds = mManager.getCameraIdList();
    
  2. # 2 楼答案

    getnumberofcameras是静态方法,请尝试将其用作

    count =Camera.getNumberOfCameras ();