2015-10-19 53 views
3

從Build tool 22.0切換到23.1後,我在啓動活動方法中收到錯誤。活動意圖權限Android M SDK 23

Intent callIntent = new Intent(Intent.ACTION_CALL); 
callIntent.setData(Uri.parse("tel:" + phoneNumber)); 
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(callIntent); 

在管線startActivity(callIntent)顯示該錯誤是

呼叫需要其可以由用戶被拒絕的許可:代碼應 明確地檢查是否許可​​是可用的(以 checkPermission)或顯式處理一個潛力 SecurityException

同樣的錯誤顯示爲位置和內容解析器。 我解決它通過檢查像

if (mContext.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
          || mContext.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
    locationManager.requestLocationUpdates(
    LocationManager.GPS_PROVIDER, 
        MIN_TIME_BW_UPDATES, 
        MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
    location = LocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    } 

狀況究竟這是爲了調用startActiivty方法所需的條件? 請提供詳細信息,如果可能的話,可能會導致相同類型的錯誤的其他權限。

+1

檢查這個演示HTTPS ://github.com/nitiwari-dev/Android-M-RuntimePermissionDemo – nitesh

回答

6

究竟調用startActivity方法需要什麼條件?

您的代碼

Intent callIntent = new Intent(Intent.ACTION_CALL); 
callIntent.setData(Uri.parse("tel:" + phoneNumber)); 
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(callIntent); 

採用Intent.ACTION_CALL意圖,這需要一個許可,即android.permission.CALL_PHONE之一。

通常你把這個在您的清單

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> 

但API 23+你必須檢查的權限運行時,你一樣有位置做:

if (mContext.checkSelfPermission(Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { 
    Intent callIntent = new Intent(Intent.ACTION_CALL); 
    callIntent.setData(Uri.parse("tel:" + phoneNumber)); 
    callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(callIntent); 
} 
+0

謝謝蒂姆。它工作正常。我有一個疑問。在哪裏權限將從用戶授予應用程序?如果上面的代碼寫在後臺服務中,對話框將如何出現,如下所示https://cloud.githubusercontent.com/assets/10304040/7883031/ee96f3f0-0630-11e5-8b77-44b696bea53a.png –

+0

感謝您的時間:) –