2017-05-12 34 views
1

我發現了以下情況例外:MANAGE_OVERLAY_PERMISSION - 活動未發現異常

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.action.MANAGE_OVERLAY_PERMISSION dat=package:com.my.app } 
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1816) 
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1525) 
at android.app.Activity.startActivityForResult(Activity.java:4265) 

這是發生在一個應用程序,已經是一個幾年的歷史了,工作完美無缺。現在我得到了這個例外,設備ZUK Z1。有任何想法嗎?看起來像ROM的問題。這個ROM提供了一種替代方式來獲得重疊圖紙的權限嗎?

編輯 - 這裏是我用來獲取權限

public static void checkOverlayPermission(Activity activity) 
{ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(activity)) 
    { 
     Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + activity.getPackageName())); 
     activity.startActivityForResult(intent, BaseDef.OVERLAY_PERMISSION_REQ_CODE); 
    } 
} 
+0

運行您的應用程序的版本是什麼版本。記住Android 6.0 Marshmallow後,你的應用程序需要在運行時請求權限(一些)。您不能再請求清單的許可。 – kggoh

+0

所有從android 5到7.如果我不會開始一個活動(像之前的android 6),我不會得到異常。我添加了上面的代碼來告訴你我在做什麼 – prom85

+0

嘿@ prom85你找到了這個問題的任何解決方案 – UltimateDevil

回答

2

試試這個one.This爲我工作的功能。它可以幫助你

if (!Settings.canDrawOverlays(this)) { 
       Intent localIntent = new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION"); 
       localIntent.setData(Uri.parse("package:" + getPackageName())); 
       localIntent.setFlags(268435456); 
       startActivity(localIntent); 
      } 

試試這個,如果你的rom是問題

基本上你不能只檢查其中有設置問題的所有ROM。上面的代碼在android N中也能正常工作。我自己測試了這個。

你可以做的是把你的代碼放在一個try catch塊中,當你進入catch塊顯示用戶時,會要求他手動賦予overlay權限,而不是直接將他帶到設置頁面。

有一些ROM基本上是一些系統設置有問題的自定義ROM,因此這是您可以用來解決這些情況的最佳方法。