2017-06-12 101 views
0

我正在研究一個請求運行時權限的應用程序。我怎樣才能使它在所有的Android版本上工作?哪些支持運行時權限,哪些不支持。Android中的運行時權限

回答

1

您可以創建一個父活動或可以處理的權限請求,然後創建檢查權限,使所有的孩子可以使用它的方法的片段。該方法將檢查權限並致電onPermissionGrantedonPermissionDenied

如果Android版本是小於m,只是立即調onPermissionGranted,否則檢查權限正常:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
    callback.onPermissionGranted(); 
    return; 
} 

//check permissions at runtime... 

然後運行你的代碼需要在任何API級別onPermissionGranted回調權限。

0

很簡單。如果您的應用程序在Android米長跑,你要問的權限,否則,所有的權限被自動授予

閱讀文檔https://developer.android.com/guide/topics/permissions/requesting.html

+0

我正在使用Dexter應用程序權限庫!當應用程序啓動時,它會要求獲得CALL權限。它可以在棉花糖和牛軋糖上正常工作,但是app版本會在較低版本上關閉。如果我刪除了德克斯特權限的應用程序適用於較低的Android版本的罰款,但後來它不要求對棉花糖的權限高。 –

0

如果你在API級別23運行你的應用程序(在安裝時被接受)或者更高,您必須在運行時請求權限,否則只需像往常一樣在Android Manifest中添加權限即可。

0

在API等級23及更高版本中,您必須在運行時管理權限。

如果您在API等級23或更高版本上設計應用程序目標,則舊版本不會有任何問題。

0

我可以分享我如何處理activity中的權限。您可以將如下代碼的代碼放入oncreate和onResume中。 正如在看到如果(Build.VERSION.SDK_INT> = Build.VERSION_CODES.M) 此代碼爲Android 6及以上只。 這就是爲什麼它以* isPermissionOK = true開頭; *

isPermissionOK = true; 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

     List<String> requiredPermissions = new ArrayList(); 
     requiredPermissions.add(android.Manifest.permission.INTERNET); 
     requiredPermissions.add(android.Manifest.permission.ACCESS_NETWORK_STATE); 
     requiredPermissions.add(android.Manifest.permission.ACCESS_WIFI_STATE); 
     requiredPermissions.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     requiredPermissions.add(android.Manifest.permission.WAKE_LOCK); 
     requiredPermissions.add(android.Manifest.permission.READ_PHONE_STATE); 
     requiredPermissions.add(android.Manifest.permission.BLUETOOTH); 
     requiredPermissions.add(android.Manifest.permission.BLUETOOTH_ADMIN); 
     requiredPermissions.add(android.Manifest.permission.ACCESS_COARSE_LOCATION); 
     requiredPermissions.add(android.Manifest.permission.ACCESS_FINE_LOCATION); 
     requiredPermissions.add(android.Manifest.permission.READ_EXTERNAL_STORAGE); 

     for (int i = 0; i < requiredPermissions.size(); i++) { 
      if (ContextCompat.checkSelfPermission(mContext, requiredPermissions.get(i)) != PackageManager.PERMISSION_GRANTED) { 
       isPermissionOK = false; 
       break; 
      } 
     } 
    } 


    if (!isPermissionOK) { 
     return; 
    }