Android createTempfileは許可を拒否しますか?
-
01-10-2019 - |
質問
これは簡単ですが、動作しません。 mp3ファイルのプレビュー用のTEMPファイル(後で永続的なストレージファイル)を作成しようとしています。次の例として、接尾辞の次のバリエーションを試しました。
public class StudyFileIo extends Activity {
private static final String TAG = "StudyFileIo";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
File tempFooFile = File
.createTempFile("foo", "dat");
Log.i(TAG, tempFooFile.getAbsolutePath());
} catch (IOException e) {
Log.e(TAG, e.toString());
e.printStackTrace();
}
}
}
ログ:
09-07 11:25:20.299 E/StudyFileIo( 8859): java.io.IOException: Permission denied
09-07 11:25:20.299 W/System.err( 8859): java.io.IOException: Permission denied
09-07 11:25:20.299 W/System.err( 8859): at java.io.File.createNewFileImpl(Native Method)
09-07 11:25:20.299 W/System.err( 8859): at java.io.File.createNewFile(File.java:1160)
09-07 11:25:20.299 W/System.err( 8859): at java.io.File.createTempFile(File.java:1224)
09-07 11:25:20.299 W/System.err( 8859): at java.io.File.createTempFile(File.java:1182)
09-07 11:25:20.299 W/System.err( 8859): at com.mobibob.studyfileio.StudyFileIo.onCreate(StudyFileIo.java:25)
09-07 11:25:20.299 W/System.err( 8859): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-07 11:25:20.299 W/System.err( 8859): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-07 11:25:20.309 W/System.err( 8859): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-07 11:25:20.309 W/System.err( 8859): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-07 11:25:20.309 W/System.err( 8859): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-07 11:25:20.309 W/System.err( 8859): at android.os.Handler.dispatchMessage(Handler.java:99)
09-07 11:25:20.309 W/System.err( 8859): at android.os.Looper.loop(Looper.java:123)
09-07 11:25:20.309 W/System.err( 8859): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-07 11:25:20.309 W/System.err( 8859): at java.lang.reflect.Method.invokeNative(Native Method)
09-07 11:25:20.309 W/System.err( 8859): at java.lang.reflect.Method.invoke(Method.java:521)
09-07 11:25:20.319 W/System.err( 8859): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
09-07 11:25:20.319 W/System.err( 8859): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
09-07 11:25:20.319 W/System.err( 8859): at dalvik.system.NativeStart.main(Native Method)
AndroidManifest.xmlの設定はありませんか(デフォルトマニフェストを使用しています)?
解決
アプリケーションが所有するディレクトリ内にTEMPファイルを作成する必要があります。使用する必要があります createTempFile(String prefix, String suffix, File directory)
, 、 どこ ディレクトリ TEMPファイルを書く場所です。有効な場所を取得できます ディレクトリ からの結果 Context.getFilesDir()
また Context.getDir(String name, int mode)
.
他のヒント
デフォルトでTEMPファイルがそこに作成されるため、外部ストレージで書く許可を逃しただけだと思います。追加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
あなたのマニフェストに、それは機能するはずです。
所属していません StackOverflow