iT邦幫忙

0

在Android Studio中使用NEXUS 7模擬器開啟自己開發的app並使用camera2 API, onOpen方法得到呼叫但畫面無反應

如題,在Android Studio中使用NEXUS 7模擬器開啟自己開發的app並使用camera2 API,
camera API中代表啟動成功才會得到回呼的onOpen方法也確實得到呼叫,但畫面豪無反應。

確認前後鏡頭在AVD的設定都有開啟,且只有不管前後鏡頭都選擇模擬,或是只有後鏡頭是選擇webCam,都無法解決

也試過從5.1開始到Oreo之後的各個平台,還是無法解決。

在Stack Overflow看到有人分享說Emulator預設相機都是關閉的,必須找到Config.ini檔案並在裡面加入hw:camera=yes,我是用mac,但完全找不到那檔案,且AVD設定裡面也已經有設定相機是否要開啟前後鏡頭,感覺架構已經更改,不會產生config檔案?

以下是logcat在按下camera按鈕後的紀錄及相關程式碼:

11-14 18:21:02.627 2739-2739/com.kiahstarck.exercise I/CameraManagerGlobal: Connecting to camera service
11-14 18:21:02.658 2739-2739/com.kiahstarck.exercise I/CameraManager: Using legacy camera HAL.
11-14 18:21:02.765 2739-2739/com.kiahstarck.exercise I/System.out: Camera's successfully opened
 final CameraDevice.StateCallback sb=new CameraDevice.StateCallback() {
           @Override
           public void onOpened(@NonNull CameraDevice camera) {

               System.out.println("Camera's successfully opened");

           }

           @Override
           public void onDisconnected(@NonNull CameraDevice camera) {

           }

           @Override
           public void onError(@NonNull CameraDevice camera, int error) {

           }
       };



       final Handler handler=new Handler();


       final ImageButton take_photo_btn=(ImageButton)findViewById(R.id.take_photo_btn);
       take_photo_btn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {

               CameraManager manager =
                       (CameraManager)getSystemService(Context.CAMERA_SERVICE);
               try {
                   String[] ids=manager.getCameraIdList();

                   int permission = ActivityCompat.checkSelfPermission(MainActivity.this,
                           Manifest.permission.CAMERA);

                   System.out.println("允許值"+permission);

                   if (permission != PackageManager.PERMISSION_GRANTED) {
                       //未取得權限,向使用者要求允許權限
                       System.out.println("未取得權限,向使用者要求允許權限");

                       ActivityCompat.requestPermissions(
                               MainActivity.this,
                               new String[] {CAMERA},
                               REQUEST_CAMERA_ACCESS);

//                        manager.openCamera(ids[0], sb, handler);

                   } else{

                       System.out.println("已有權限");

                       System.out.println(ids[0]);


                       manager.openCamera(ids[0], sb, null);
                       }






                   } catch (CameraAccessException e) {
                       e.printStackTrace();
                   }





           }});

非常感謝任何提供建議的朋友!謝謝!

1 個回答

0
海綿寶寶
iT邦超人 1 級 ‧ 2017-11-29 10:07:21

既然是相機功能
建議你使用真機來測試

kiah7436 iT邦新手 5 級 ‧ 2017-11-29 15:24:47 檢舉

感謝回覆!我是有看到有人分享說,用5.0時沒辦法,6.0就可正常開啟的bug,但我從5.1~最新版本測試沒有一個行@@雖然早知道Android很扯,但在模擬器裡面相機個版本都無法開啟,Developer site卻沒有一點提示,網上也沒人提到這個問題,包括Stack Overflow,實在還是很難確定是不是自己問題@@但明明一切正常,難道這已經扯到是共識了媽@@

建議你還是把時間花在寫 app 上
不要浪費在 debug 這種環境問題上
真心・不騙

kiah7436 iT邦新手 5 級 ‧ 2017-11-30 17:40:30 檢舉

真的浪費超多時間的@@
但很奇怪 都沒有辦法確定是bug 大家怎能放心..

我要發表回答

立即登入回答