2016-12-29 72 views
0

我試圖通過調用方法LoadData()來從onCreate方法的外部存儲中讀取文件。這是我的代碼。從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()不是第一次調用,因爲權限尚未設置。有沒有一種方法,因爲我想要調用LoadData()onCreate()

回答

3

在Marshmallow 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

感謝您的回覆。它有幫助。 –