2016-12-28 5 views
1

私のSDカードに次のコードを使ってフォルダを作成しようとしていますが失敗しました。私は上記のコードを実行するとonCreate()MarshMallow&上記のデバイスでアンドロイドにディレクトリを作成できませんでした

File test = new File(Environment.getExternalStorageDirectory(),"my_directory"); 
if(!test.exists()) 
{ 
    try 
    { 
     if (test.mkdir()) 
     { 
      Log.d("xxx", "directory created"); 
     } 
     else 
     { 
      Log.d("xxx", "directory creation failed"); 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
else 
{ 
    Log.d("xxx","directory already present"); 
} 

で書かれた私のコードは、それだけで、 directory creation failedログを出力する任意の例外を与えるものではありません。私はまた、次の権限を与えている

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

:私は小米科技のredmiノート3を使用していますし、それが重要だ場合のAndroidバージョンは6.0.1です。

+4

あなたがSDK 23以降をターゲットにしている場合は、実行時に許可を要求する必要があり、あなたはそれをやっている:ストレージ/あなたがそれを取得/ 0 エミュレート? – Egor

+0

これを実行するにはマシュマロデバイスを使用していますか? –

+0

@KushPatel:はい私はマシュマロ装置を使用しています。 –

答えて

2

あなたも

(今私はSDカードに取得する方法がわからないまでカウスは、私は、私のアプリで同じことを望んでいた)私はちょうどAPI 21のためにそれを知っている

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

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
         if (checkPermission()) { 
          //do your work 
         } else { 
          requestPermission(); 
         } 
        } 
      } 


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

      protected void requestPermission() { 

       if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.WRITE_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.WRITE_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) { 
         //do your work 
        } else { 
         Log.e("value", "Permission Denied, You cannot use local drive ."); 
        } 
        break; 
      } 
     } 
+0

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

0

このコードを試してみてくださいあなたの目録にこれが必要です!!

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

Environment.getExternalStorageDirectory()は、内部ストレージを宣言します。 正確なパスは次のとおりです。

Log.i(TAG, "path is:" + Environment.getExternalStorageDirectory().toString());

+0

'Environment.getExternalStorageDirectory()は内部ストレージを宣言します.'いいえ、内部はありません。関数名には、「ExternalStorage」が非常にはっきりと記載されているように見えるかもしれません。 – greenapps

関連する問題