2016-09-04 12 views
3

私は実行時のアクセス許可を実装しようとしていますが、FragmentActivityonRequestPermissionResult()の場合には問題はほとんどありません。 checkPermissions()メソッドは非常にうまく動作しますが、onRequestPermissionResult()はユーザーの許可または拒否のアクセス許可の後では呼び出されません。FragmentActivityでonRequestPermissionsResult()が呼び出されません

許可を要求するシステムダイアログボックスが表示された場合、MyActivity.onDestroy()は呼び出されません。この問題に関連していますか?

私はすでにthis oneanother oneに従ってみましたが、私は何かを逃したと思います。

私のデバイスはネクサス5X(アンドロイド6.0)とTarget SDKのバージョンが23 最小サポートSDKのバージョンですが、もちろん15 ですが、私はAndroidManifest.xmlに必要な権限を書き、build.gradleでV23のサポートライブラリを追加しました。

これは私のコードです:

public class MyActivity extends FragmentActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     checkPermissions(); 
    } 

    private void checkPermissions(){ 
     String[] dangerousPermissions = { 
       Manifest.permission.READ_PHONE_STATE, 
       Manifest.permission.GET_ACCOUNTS, 
       Manifest.permission.WRITE_EXTERNAL_STORAGE, 
       Manifest.permission.RECORD_AUDIO 
     }; 

     for(String permission : dangerousPermissions){ 
      if (!hasPermission(permission)) { 
       Log.e("permission.debug", "need to grant " + permission); 
       ActivityCompat.requestPermissions(this, dangerousPermissions, 4); 
      } 
     } 
    } 

    public boolean hasPermission(String permission){ 
     return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED; 
    } 

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

     Log.d("permission.debug", " request code " + requestCode); 
     for (int i = 0; i < permissions.length; i++) { 
      if (grantResults[i] == 0 && Manifest.permission.READ_PHONE_STATE.equals(permissions[i])) { 
       initiate(); 
      } 
     } 
    } 
} 

これは私のコードのためのログです:

E/permission.debug: need to grant android.permission.READ_PHONE_STATE 
E/permission.debug: need to grant android.permission.GET_ACCOUNTS 
E/permission.debug: need to grant android.permission.WRITE_EXTERNAL_STORAGE 
E/permission.debug: need to grant android.permission.RECORD_AUDIO 

ありがとうございました。

+0

への呼び出しでMyActivity.thisの代わりに、このを呼び出すことによってそれを修正、あなたのlogcatを共有していただけますか? –

+0

このコードのログをいくつか取得しようとしましたが、エラーや警告はありませんでした。それは変です。 –

+0

あなたはこの[link](https://stackoverflow.com/questions/32714787/android-m-permissions-onrequestpermissionsresult-not-being-called) –

答えて

1

ActivityCompat.requestPermissionsではなくrequestPermissionsを直接呼び出すようにしてください。あなたがリストcheckNeededPermissionsを定義しているところ

if (checkNeededPermissions.size() > 0) { 
    Log.d(TAG, "Checking permissions"); 
    requestPermissions(this, dangerousPermissions, 4); 
} 

EDIT

以下のように私には見えません。上記のようにログを入れてください。

+0

で回答を見つけることができます。残念ながら、minSdkVersionは「15」です。だから私は 'ActivityCompat.requestPermissions() 'を使う必要があります。 –

+0

@EugeneKimなぜFragmentActivityを使っているのですか? –

+0

@EugeneKim私は上記の答えを編集してこれを一度試してみてください。そしてあなたのlogcatを共有してください –

1

私はちょうどsolutionを見つけました。

AndroidManifest.xmlのアクティビティをnoHistory属性で宣言すると、アクティビティが画面から消えたときにアクティビティタスクが削除されます。

onRequestPermissionResult()コールバックを受け取るには、アクティビティが再開することを保証する必要があります。

0

同じ問題がありました。 ActivityCompat.requestPermissions

関連する問題