在android設備中,外部存儲器可能存在也可能不存在。我應該在哪裏寫一個臨時文件?
我正在寫一個應用程序,在一個案例中,來自URL &的流mp3會將其存儲在內存中用於臨時目的的文件中。
但我想確定那個文件會被創建。
首先我想用getCacheDir的,但它提到:
這些文件將是那些在設備上運行存儲 之低,會首先被刪除。無法保證這些文件何時會被刪除,其中 。注意:您不應該依賴系統爲您刪除這些文件 ;您應始終擁有合理的最大值,例如1 MB, 用於緩存文件佔用的空間量,並在超過該空間時修剪那些 文件。
那麼,我想到使用getExternalCacheDir,但後來我不確定設備是否包含外部存儲器。
還有一個可選問題: 將文件保存到內存之前,我想檢查目錄是否有足夠的空間。如何才能做到這一點?
更新
我也想過創造Environment.getDownloadCacheDirectory()
文件,因爲它可能會使用每個設備上。
File f3 = new File(Environment.getDownloadCacheDirectory(), "Temp.txt");
if (!f3.exists()) {
f3.createNewFile();
}
但低於了在createNewFile錯誤跟蹤():
java.io.IOException: Permission denied
at java.io.File.createNewFileImpl(Native Method)
at java.io.File.createNewFile(File.java:1257)
at com.example.activitylifecycle.MyStreamingApp.startStream(MyStreamingApp.java:42)
at com.example.activitylifecycle.MyStreamingApp.onCreate(MyStreamingApp.java:23)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
at android.app.ActivityThread.access$1500(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4385)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
at dalvik.system.NativeStart.main(Native Method)
清單文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activitylifecycle"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.activitylifecycle.ActivityLifeCycle"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MyStreamingApp"
android:label="@string/app_name" >
<intent-filter android:priority="100" >
<action android:name="com.example.activitylifecycle.MYSTREAMINGAPP" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
請建議。 謝謝
爲什麼不在你的應用程序數據目錄中? – RvdK 2013-02-25 11:25:33
你需要自己設計這樣的邏輯。我的意思是驗證哪些外部存儲器可用,以及它是否有足夠的空間用於所需的文件操作。它的一次設置和後來你準備去:) – waqaslam 2013-02-25 11:30:43
謝謝@Waqas @Rvdk。好吧,所以我經歷了一些Android環境變量,即。 'getExternalStorageDirectory; getDownloadCacheDirectory; getDataDirectory'。我想用'getDownloadCacheDirectory()'。我想它會在所有的設備上可用。 (請糾正,如果我錯了) – reiley 2013-02-25 18:43:38