2016-12-20 4 views
-1

ディレクトリを作成するために次のコードを試しましたが、このコードはmarshmallowまで動作しますが、Android 'N'では動作しません。Android Nでファイルを作成

File direct = new File(Environment.getExternalStorageDirectory() + "/MyApp/Drawing"); 
if (!direct.exists()) { 
    if (direct.mkdirs()) { 
     Log.v(TAG, "Directory created"); 
    } 
    else { 
     Log.v(TAG, "Directory doesn't created"); 
    } 
} 

File file = new File(direct, "newfile.jpg"); 
Uri contentUri = FileProvider.getUriForFile(HandDrawingActivity.this, "com.example.fileprovider", file); 
String fname = contentUri.getPath(); 
try { 
    FileOutputStream fos = new FileOutputStream(fname); 
} catch (FileNotFoundException e){ 
    e.printStackTrace(); 
} 

ここでは、この行にファイルが見つかりませんでした。 注:ディレクトリが作成され、ファイルは作成されません。ファイルがすでに存在する場合は、ファイルを開くことができます。 ご協力いただければ幸いです。

+5

7.0からのアクセス許可の変更を見てください。https://developer.android.com/about/versions/nougat/android-7.0-changes.html#perm –

+0

@ThomasRoulin FileProviderを使用して既存のファイルを開くことができます。私はそれを使用して新しいディレクトリを作成する方法を知ってもいいですか? – Gunaseelan

+1

このファイルを試してください。direct = new File(Environment.getExternalStorageDirectory()、 "Drawing"); –

答えて

0

FileProviderを削除し、次のコードを追加しました。そして今、これは動作します。

try { 
    if(f.createNewFile()){ 
     Log.v(TAG, "File created"); 
    }else { 
     Log.v(TAG, "File doesn't created"); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

String fname = f.getPath(); 
FileOutputStream fos; 
try { 
    fos = new FileOutputStream(fname); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

ファイルが作成され、魅力的に機能します。

関連する問題