簡體   English   中英

錯誤 android.content.ActivityNotFoundException:僅在極少數設備中

[英]Error android.content.ActivityNotFoundException: only in very few devices

onRequestPermissionsResult上獲取android.content.ActivityNotFoundException:在極少數(例如 Android 10,諾基亞)設備中,但它在所有其他設備中都可以正常工作。

 @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 123:
                if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                    // Permission Granted

                    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                    photoPickerIntent.setType("image/*");
                    startActivityForResult(photoPickerIntent, 1);


                } else {
                    // Permission Denied
                    Toast.makeText(Pic.this, "Gallery_Permission Denied", Toast.LENGTH_SHORT)
                            .show();
                }
                break;
            case 789:
                if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                    // Permission Granted

                    camera_getpic();
                }
                else {
                    // Permission Denied
                    Toast.makeText(Pic.this, "Camera_Permission Denied", Toast.LENGTH_SHORT)
                            .show();
                }
                break;
            case 555:
                if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                    // Permission Granted

                    camera_continue();
                } else {
                    // Permission Denied
                    Toast.makeText(Pic.this, "Permission Denied", Toast.LENGTH_SHORT)
                            .show();
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }

    }

錯誤。

java.lang.RuntimeException: 
  at android.app.ActivityThread.deliverResults (ActivityThread.java:4873)
  at android.app.ActivityThread.handleSendResult (ActivityThread.java:4914)
  at android.app.servertransaction.ActivityResultItem.execute (ActivityResultItem.java:51)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2041)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:214)
  at android.app.ActivityThread.main (ActivityThread.java:7386)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:492)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:980)
Caused by: android.content.ActivityNotFoundException: 
  at android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:2058)
  at android.app.Instrumentation.execStartActivity (Instrumentation.java:1716)
  at android.app.Activity.startActivityForResult (Activity.java:5192)
  at android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:767)
  at android.app.Activity.startActivityForResult (Activity.java:5150)
  at android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:754)
  **at com.sample.pic.Pic.onRequestPermissionsResult (Pic.java:334)**
  at android.app.Activity.dispatchRequestPermissionsResult (Activity.java:8264)
  at android.app.Activity.dispatchActivityResult (Activity.java:8114)
  at android.app.ActivityThread.deliverResults (ActivityThread.java:4866)

原因

當對 Context# startActivity或其變體之一的call失敗時,將引發此異常,因為找不到 Activity 來執行給定的 Intent。

您假設這大約 20 億台 Android 設備中的每一個都有一個或多個應用程序,其活動與Intent.ACTION_MAINIntent.CATEGORY_APP_YourAppName匹配。 這些設備中的任何一個都不需要進行此類活動。

解決方案

Option #1:

將您的 startActivity() 調用包裝在try/catch block中並捕獲 ActivityNotFoundException,然后告訴用戶您找不到合適的應用程序。

Option #2:

使用PackageManagerqueryIntentActivities()查看 Intent 是否有任何匹配項。 如果沒有,不要調用startActivity() ,然后告訴用戶你找不到合適的應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM