2017-06-27 42 views
0

我正在檢查應用程序是否因爲Android M授予ACCESS_COARSE_LOCATION權限。據我所知,具有低於Marshmallow版本的設備會自動授予安裝的所有權限。ACCESS_COARSE_LOCATION未在Android 5.1.1上自動授予

不過,如果我添加這一段代碼,它在Android 5.1.1

if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) 

返回false是不是因爲設備,我使用的測試,已經完全禁止訪問這些位置的所有應用程序?

+0

是在許可ACCESS_COARSE_LOCATION你的清單,你的目標API上的API 23或更高? –

+0

它在清單和targetSdkVersion是25,minSdkVersion是15 –

+0

嗯很奇怪。我不知道沒有更多的代碼,但作爲一個工作,你可以做 if(Build.VERSION.SDK_INT

回答

0

其實Android的最低sdk版本21-22即5.0不需要檢查權限,但是當我們必須在不同的手機上測試我們的應用程序的例如。在最低sdk版本23上,即在棉花糖上。您需要在應用程序中檢查外部的權限。

寫下面的代碼在你的Starting_Activity

//requesting Permission 
private void requestingPermission(){ 
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_NETWORK_STATE)){ 
     //Exaplian here why you need this permission 
    } 
    //Ask for the permission 
    ActivityCompat.requestPermissions(this,new String[]{ 
      Manifest.permission.ACCESS_NETWORK_STATE, },STORAGE_PERMISSION_CODE); 
} 

現在添加另一個

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    //checking the request code of Permission request 
    if (requestCode == STORAGE_PERMISSION_CODE){ 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){//Toast.makeText(getApplicationContext(),"Permission Granted",Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(getApplicationContext(),"Permission Denied",Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

不要忘了在活動的onCreate調用以下方法()方法

requestingPermission(); 
+0

感謝您的回覆,但我知道如何請求權限。我只是不明白爲什麼我沒有自動授予Android 5.1.1的權限 –

+0

@JakubGruber我已經告訴過,在Android 5.1.1上,我們不需要單獨處理權限,它將由他們自己處理。但是,棉花糖我們必須告訴Android sdk我們要在我們的應用中使用xyz權限 –

+0

是的,但是這種權限並未在我的手機上授予,我試圖找出的原因是爲什麼。因爲它應該是 –