2016-12-29 8 views
0

onCreateメソッドで外部ストレージからファイルを読み取ろうとしていますが、メソッドLoadData()を呼び出しています。ここに私のコードです。外部ストレージのファイルをonCreateのマシュマロとマシュマロのデバイスで読み取る

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

 
//I tried declaring permissions before calling the file 
 
//   ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1); 
 

 
//  LoadData(Environment.getExternalStorageDirectory().getAbsolutePath()); 
 

 
     LoadMyData(Environment.getExternalStorageDirectory().getAbsolutePath()); 
 

 
     ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1); 
 

 

 
}

これは行くべきかです: 1.Open the app for the first time --> Ask for permissions --> LoadData(); 2.Open the app for the secondtime --> LoadData();

これは、それが起こっているかである。 1.Open the app for the first time --> Ask for permissions ;(It is not calling LoadData()) 2.Open the app for the second time --> LoadData();(For the second time it is calling LoadData())

をすべて実行時の権限が適切に宣言されています。私はLoadData()が最初に呼び出されていないことを知っています。なぜなら、アクセス権がまだ設定されていないからです。 onCreate()でLoadData()を呼び出す必要があるからです。

答えて

3

マシュマロOS以上では、このコードを使用して外部ストレージに読み書きする必要があります。

@Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
          if (checkPermission()) { 
             LoadMyData(Environment.getExternalStorageDirectory().getAbsolutePath()); 

          } else { 
           requestPermission(); 
          } 
         } 
       } 


       protected boolean checkPermission() { 
        int result = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE); 
        if (result == PackageManager.PERMISSION_GRANTED) { 
         return true; 
        } else { 
         return false; 
        } 
       } 

       protected void requestPermission() { 

        if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)) { 
         Toast.makeText(this, "Write External Storage permission allows us to do store images. Please allow this permission in App Settings.", Toast.LENGTH_LONG).show(); 
        } else { 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
          requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 100); 
         } 
        } 
       } 

      @Override 
      public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
       switch (requestCode) { 
        case 100: 
         if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
          LoadMyData(Environment.getExternalStorageDirectory().getAbsolutePath()); 
         } else { 
          Log.e("value", "Permission Denied, You cannot use local drive ."); 
         } 
         break; 
       } 
      } 
+0

迅速な返信ありがとうございます。それは –

2

あなたは、ユーザーの権限を付与した後LoadData()を呼び出す必要があります - あなたの活動はActivityCompat.OnRequestPermissionsResultCallbackを実装しており、許可要求の結果は、そのonRequestPermissionsResult(int, String[], int[])方法に配信されます。

+0

あなたの返信いただきありがとうございます。それは助けになった。 –

関連する問題