15

これは単純ですが、機能しません。MP3ファイルのプレビュー用に一時ファイル(後で永続ストレージファイル)を作成しようとしています。次の例として、次のサフィックスのバリエーションを試しました。

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設定はありますか(デフォルトのマニフェストを使用しています)?

4

3 に答える 3

20

アプリケーションが所有するディレクトリに一時ファイルを作成する必要があります。を使用する必要がありますcreateTempFile(String prefix, String suffix, File directory)。ここで、directoryは、一時ファイルが書き込まれる場所です。またはからの結果でディレクトリの有効な場所を取得できます。Context.getFilesDir()Context.getDir(String name, int mode)

于 2010-09-07T16:48:33.997 に答える
14

一時ファイルはデフォルトで外部ストレージに作成されるため、外部ストレージに書き込む権限を逃しただけだと思います。追加

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

マニフェストに追加すると、機能するはずです。

于 2011-03-28T01:39:34.370 に答える
3

<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"を追加した後でも、 これを明示するためにエラーが発生していました。しかし、マニフェストファイルのアプリケーションタグにこの android:requestLegacyExternalStorage = "true"を追加した後、TempFile を作成し、電話から写真をキャプチャすることができます。

<アプリケーションandroid:requestLegacyExternalStorage = "true"

于 2020-07-22T07:29:30.870 に答える