2017-03-17 82 views
0

私はSamsung Galaxy Tab Sタブレットを使用しており、実行時に外部ストレージへの書き込み権限を与えようとします。AndroidのrequestPermissionダイアログが表示されない

ただし、許可を求めるダイアログは表示されません。コードの代わりに、onRequestPermissionResultはPERMISSION_DENIEDの結果で即座に実行されます。私はさらに、デバイスのアプリケーション設定でストレージ許可を手動で許可しようとしましたが、その場合でも結果はPERMISSION_DENIED(grantResultsは-1)になります。

私のコードは次のようになります。

public class MainActivity extends AppCompatActivity { 

    public static final int REQUEST_STORAGE_PERMISSION = 225; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (Build.VERSION.SDK_INT >= 23) { 
      if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        == PackageManager.PERMISSION_GRANTED) { 
       process(); 
      } else { 
       requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION); 
      } 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case REQUEST_STORAGE_PERMISSION: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_LONG).show(); 
        process(); 

       } else { 
        Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_LONG).show(); 
       } 
     } 
    } 


    public void process() { 
     //... 
    } 

} 

アプリケーションを起動し、それが即座に私の前に任意のダイアログを表示せず、-Toast「権限拒否」と表示されます。これは、たとえ私がタブレットのアプリ設定でStorage-permissionを手動で許可したとしても起こります。

マニフェストファイルには、同様のスレッドで提案されているように、アプリケーションタグの外側の適切な場所にアクセス許可が含まれています。

私はアプリを再インストールしてみましたが、既にタブレットをリセットしましたが、何も動作していないようです。

答えて

1

の代わり:あなたが持っているとして、あなたはAppCompatActivity

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION); 

EDIT

を使用しているとして:

requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION); 

それはあなたがこれを使用する必要が断片

のために働きます複数のプロジェクトモジュール:必要両方の許可を追加するManifest

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

ありがとう。だから私は私のメインプロジェクトのラインを変更し、何も変わっていない。それから、私は先に進み、新しいプロジェクトを作成し、コードをコピーして、それがうまくいった。だから私はそれが私のメインプロジェクトで仕事をしなかった理由を探し続けた。プロジェクトに2つのモジュールが追加されました。プロジェクトをコンパイル( ':module1')し、 をコンパイルすると、プロジェクトがコンパイルされます( ':module2') 私のgradleファイルに突然動作します。しかし、私が彼らにコメントすると、リクエストダイアログはもう表示されません。 – FelRPI

+0

これを見てください[回答](http://stackoverflow.com/questions/17536652/gradle-and-multi-project-structure) – rafsanahmad007

+0

さて、実際には、最後の間違いを修正しました。 問題は、メインモジュールのマニフェストファイルにのみ必要な使用許可行が含まれていることでした。私は知らなかった、すべてのモジュールもこの行を含む必要があります。だから、私のすべてのモジュールのマニフェストに を追加しました。 ありがとう! – FelRPI

関連する問題