2015-11-02 15 views
11

を付与されていないアンドロイドOS 4.0上で私のアプリを実行しているとしてREAD_EXTERNAL_STORAGE許可を要求するとき、私は問題を抱えている:私は常に、コールバックAndroidのマシュマロ許可モデルが常に

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

grantResults != PackageManager.PERMISSION_GRANTED 
に乗る

ActivityCompat.requestPermissions(ctx, requestedPermissions, requestCode); 

ActivityCompat.checkSelfPermissionでアクセス許可を確認すると、常にpermissionDeniedが返されます。

これは、システムダイアログでアクセス許可を要求することによって、OS 6.0で正常に動作します。 Android OS 4.xでは4.0の権限が常に付与されています。 OS 4.0この問題の原因となったREAD_EXTERNAL_STORAGE以外の他の権限(カメラ、カレンダー、連絡先、電話)は正常に動作しています。

多分OSの問題?

+0

これは変です。 .requestPermission(requestedPermissions、requestCode);の通常のアクセス方法を試してみてください。 – dex

+1

http://stackoverflow.com/questions/32129716/how-does-storage-access-change-on-android-6 –

+0

@dex問題は、アクセス権に関するアクティビティ関連のメソッドがAPI 23でのみアクセス可能であるということです。 – skirix

答えて

11

What ActivityCompat.requestPermissions() doesは次のとおりです。本当のrequestPermissions()に至る

  • コールあなたは、Android 6.0以上である場合、またはあなたがAndroidの

    の古いバージョンに要求されたアクセス権を保持するかどうかを確認するために

  • 使用PackageManager

READ_EXTERNAL_STORAGEの問題は、APIレベル16(Android 4.1 )。それが存在しないという単純な理由から、古いバージョンのAndroidではそれを保持することはできません。

次のいずれかのごminSdkVersion 16に設定し

  • 、または

  • READ_EXTERNAL_STORAGE前のAPIレベル16

とは無関係であることを認識し、このケースを処理するには、独自のロジックを入れて
+0

今はすべてがクリアです!ありがとうございました – skirix

+7

単純な回避策は、代わりにAPI 4である 'WRITE_EXTERNAL_STORAGE'パーミッションを要求することです.Mでは、' WRITE'と 'READ'は同じパーミッショングループに存在しますので、前者を要求すると、同じように。唯一の欠点は、4.1以前のバージョンでは、以前は 'READ'を要求していただけの場合、新しい権限が必要であることが分かります。 – Sebastiano

+1

@dextor:Androidは、権限のレベルではなく、権限グループのレベルで常にユーザーに権限を求めることを前提としています。私はその仮定をしません。 – CommonsWare

関連する問題