2016-12-29 7 views
0

LOLLIPOPでフォルダを作成する際に問題が発生しているようですが、コードは以前のバージョンで正常に機能しますが、 ログキャストにエラーはありません。ヘルプアンドロイドはLOLLIPOPでフォルダを作成していません。

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



private static Uri getOutputMediaFileUri(int type){ 
    return Uri.fromFile(getOutputMediaFile(type)); 
} 

private static File getOutputMediaFile(int type){ 
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
      Environment.DIRECTORY_MOVIES), "reelyChat/vids"); 

    if(!mediaStorageDir.exists()){ 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ 
      mediaStorageDir.mkdirs(); 
      try { 
       mediaStorageDir.createNewFile(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     }else{ 
      if(!mediaStorageDir.mkdirs()){ 
       Log.d("reelyChat", "failed to create directory"); 
       return null; 
      } 
     } 

    } 

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    File mediaFile; 
    if(type == MEDIA_TYPE_VIDEO){ 
     vid_name = "RC_"+my_user_id+"_profile.mp4"; 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + vid_name); 
    }else{ 
     return null; 
    } 

    return mediaFile; 
} 
+0

あなたのコードはMarshmallowで動作します.Marshmallowに必要な実行時アクセス許可を与えていますか? –

+0

@SteveMの提案がうまくいかない場合は、ここでいくつかの提案を見てください:http://stackoverflow.com/questions/4062357/mkdirs-returns-false-for-directory-on-sd-card- while-the-親ディレクトリが書かれています – yakobom

+0

@Steve Mはい権限が設定されているだけです。ロリポップのファイルは作成されませんが、私はmarshmallowを試していません。他の以前のバージョンはthoを操作します。 – user2692997

答えて

0

をご覧ください。実行時に書き込み権限が必要です。

//ただ、

getWirtePermissionAndCreateDir(この関数を呼び出します)。

private void getWirtePermissionAndCreateDir() { 
     if (Build.VERSION.SDK_INT < 23) {    
      createDir(); 

     } else { 
      final String[] PERMISSIONS_STORAGE = {Manifest.permission.WRITE_EXTERNAL_STORAGE}; 
      //Asking request Permissions 
      ActivityCompat.requestPermissions(mActivity, PERMISSIONS_STORAGE, 9); 
     } 
    } 

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

     boolean writeAccepted = false; 
     switch (requestCode) { 
      case 9: 
       writeAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; 
       break; 
     } 
     if (writeAccepted) { 
      createDir(); 
     } else { 
      Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_LONG).show(); 
     } 
    } 

    private void createDir(){ 
     File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_MOVIES), "reelyChat/vids"); 
     mediaStorageDir.mkdirs(); 
    } 
0

実行時にはアクセス許可を取得したようですが、実行時には表示されません。 Marshmallow以上で動作するデバイスは、実行時にパーミッションを取得する必要があります。 詳細については、Developer Site

関連する問題