2016-07-01 13 views
2

私は自分のネイティブapplication.Itでディレクトリを作成していますが、Android 5.0では完璧に動作していますが、Android 6.0(Marshmallow)では何度か働いています。次のコードを使用しています新しいディレクトリ。ビデオと画像ファイルをディレクトリに保存しています。ディレクトリ作成はマシュマロAndroidでは機能しません

public static void createApplicationFolder() { 
    File f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME); 
    f.mkdirs(); 
    f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_COMPRESSED_VIDEOS_DIR); 
    f.mkdirs(); 
    f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_TEMP_DIR); 
    f.mkdirs(); 

} 
+0

を使用すると、そのための許可を求める必要があります。 – Newbiee

+0

私はすでにマニフェストでパーミッションを追加しましたが、実行時のパーミッションを試しました。 – Csharp

+0

はい、それを求める必要があります – Newbiee

答えて

10
public class MyDevIDS extends AppCompatActivity { 

     private static final int REQUEST_RUNTIME_PERMISSION = 123; 

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

      if (CheckPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
       // you have permission go ahead 
       createApplicationFolder(); 
      } else { 
       // you do not have permission go request runtime permissions 
       RequestPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_RUNTIME_PERMISSION); 
      } 
     } 

     @Override 
     public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) { 

      switch (permsRequestCode) { 

       case REQUEST_RUNTIME_PERMISSION: { 
        if (grantResults.length > 0 
          && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
         // you have permission go ahead 
         createApplicationFolder(); 
        } else { 
         // you do not have permission show toast. 
        } 
        return; 
       } 
      } 
     } 

     public void RequestPermission(Activity thisActivity, String Permission, int Code) { 
      if (ContextCompat.checkSelfPermission(thisActivity, 
        Permission) 
        != PackageManager.PERMISSION_GRANTED) { 
       if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
         Permission)) { 
       } else { 
        ActivityCompat.requestPermissions(thisActivity, 
          new String[]{Permission}, 
          Code); 
       } 
      } 
     } 

     public boolean CheckPermission(Context context, String Permission) { 
      if (ContextCompat.checkSelfPermission(context, 
        Permission) == PackageManager.PERMISSION_GRANTED) { 
       return true; 
      } else { 
       return false; 
      } 
     } 
    } 
+0

私はこれを試しました。それは私のために働いてくれてありがとうございました。 – Csharp

+1

@Csharpあなたが大歓迎です、それが役立つならマークを付けてください。 –

1

Android Mで動作するデバイスは、直接データをストレージに書き込むことはできません。あなたはその許可を求める必要があります。

thisリンクは便利

かもしれないので、許可WRITE_EXTERNAL_STORAGEは、ここでは、実行時に求めるべきです。

public boolean permissions() { 
//cheeck id device is Android M 

if (Build.VERSION.SDK_INT >= 23) { 
    if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
      == PackageManager.PERMISSION_GRANTED) { 
     //your permission is granted 
     return true; 
    } else { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
     return false; 
    } 
} 
else { 
//permission is automatically granted on devices lower than android M upon installation 

    return true; 
} 
} 

またonRequestPermissionsResult()コールバックメソッドをオーバーライドする必要があります。ここにロジックを追加することができます。

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){ 

    //Add your logic of saving a file to directory. 
} 

} 

はそれが役に立てば幸い:) Androidのマシュマロで

+0

参照先のリンクから関連コードを追加してください。将来、このリンクが変更される可能性がありますので、将来の訪問者には役に立たないと考えています。 –

+0

READ_EXTERNAL_STORAGEにも適用されますか? –

0

は、実行時に、記憶許可グループを含め、​​を依頼する必要があります。 私はあなたの人生を楽にする良いライブラリを知っています、RxPermissions

あなたは、いくつかのコードで許可を求めることができます:アンドロイドMで

RxPermissions.getInstance(this) 
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE) 
.subscribe(granted -> { 
    if (granted) { // Always true pre-M 
     // I can write to the storage now 
    } else { 
     // Oups permission denied 
    } 
}); 
関連する問題