Возникают проблемы с получением веб-камеры для работы в эмуляторе Android, отлично работает на телефоне Android - PullRequest
0 голосов
/ 22 октября 2018

Я работаю над моим проектом с несколькими людьми.У нас есть приложение, которое должно делать снимки и применять к ним обработку изображений с помощью Google MLkit.Он прекрасно работает на телефоне моего друга на android, но, поскольку у меня его нет, мне нужно настроить свою веб-камеру, чтобы протестировать и завершить свою часть проекта.Я потратил часы, пытаясь понять это, но мне не повезло.

Вот ошибка:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pg.teethdetection, PID: 3171
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pg.teethdetection/com.pg.teethdetection.DetectTeethActivity}: java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.android.camera2/com.android.camera.CaptureActivity clip={text/uri-list U:content://com.pg.teethdetection.fileprovider/my_images/JPEG_20181022_150939_8076588917693759740.jpg} (has extras) } from ProcessRecord{56c9a53 3171:com.pg.teethdetection/u0a85} (pid=3171, uid=10085) with revoked permission android.permission.CAMERA
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.android.camera2/com.android.camera.CaptureActivity clip={text/uri-list U:content://com.pg.teethdetection.fileprovider/my_images/JPEG_20181022_150939_8076588917693759740.jpg} (has extras) } from ProcessRecord{56c9a53 3171:com.pg.teethdetection/u0a85} (pid=3171, uid=10085) with revoked permission android.permission.CAMERA
    at android.os.Parcel.createException(Parcel.java:1942)
    at android.os.Parcel.readException(Parcel.java:1910)
    at android.os.Parcel.readException(Parcel.java:1860)
    at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:3755)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1669)
    at android.app.Activity.startActivityForResult(Activity.java:4586)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
    at android.app.Activity.startActivityForResult(Activity.java:4544)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
    at com.pg.teethdetection.DetectTeethActivity.dispatchTakePictureIntent(DetectTeethActivity.java:160)
    at com.pg.teethdetection.DetectTeethActivity.onCreate(DetectTeethActivity.java:134)
    at android.app.Activity.performCreate(Activity.java:7136)
    at android.app.Activity.performCreate(Activity.java:7127)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:6669) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
 Caused by: android.os.RemoteException: Remote stack trace:
    at com.android.server.am.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1788)
    at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:717)
    at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:544)
    at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:1099)
    at com.android.server.am.ActivityStarter.execute(ActivityStarter.java:486)

Я пытался использовать разные системные образы для эмулятора, установив для веб-камеры0 значениеспереди, только сзади, к обоим.

Запросить код разрешения:

 @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_CAMERA: {
            for (int i = 0, len = permissions.length; i < len; i++) {
                String permission = permissions[i];

                if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
                    boolean
                            showRationale =
                            ActivityCompat.shouldShowRequestPermissionRationale(
                                    this, permission);

                    if (showRationale) {
                        showAlert();
                    } else if (!showRationale) {
                        // user denied flagging NEVER ASK AGAIN
                        // you can either enable some fall back,
                        // disable features of your app
                        // or open another dialog explaining
                        // again the permission and directing to
                        // the app setting
                        saveToPreferences(DetectTeethActivity.this, ALLOW_KEY, true);
                    }
                }
            }
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...