2015-10-11 17 views

答えて

9

private static final int REQUEST_FINE_LOCATION=0 
... 
loadPermissions(Manifest.permission.ACCESS_FINE_LOCATION,REQUEST_FINE_LOCATION); 

実装:

private void loadPermissions(String perm,int requestCode) { 
    if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED) { 
     if (!ActivityCompat.shouldShowRequestPermissionRationale(this, perm)) { 
      ActivityCompat.requestPermissions(this, new String[]{perm},requestCode); 
     } 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_FINE_LOCATION: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // granted 
      } 
      else{ 
       // no granted 
      } 
      return; 
     } 

    } 

} 
+1

、 'else'句(あなたはあなたの許可ワイズものを行う' checkSelfPermission() ''を返しますPackageManager.PERMISSION_GRANTED'があってはならない? 'onRequestPermissionsResult()'が呼び出されますのみ() '' requestPermissionsを呼び出した後、場合ので、私は何も起こりません述べた。 –

+0

は、あなたが「他」の実装を書き込みを持っているかもしれないいくつかの状況では、唯一の例主なアイデアです。 – Hpsaturn

16

にセキュリティ例外を取得しますアンドロイド6.0のモデル。

危険な権限は実行時のために頼まれる必要があると、使用前に毎回チェックする必要があります。

あなたはadapt new permission modelに実装を変更する必要があります。あなたの活動に

+1

あなたはAPI 23+をターゲットにしている場合通常、これは単に必要でなければなりません。しかし、我々はまた、Androidのフォールバックの実装にバグがありますAndroidの6推測上の例外のこれらの種類に遭遇しました。 'loadPermissions()'関数で – ubuntudroid

関連する問題