[英]android eclipse emulator sdcard permission denied
嘗試從我的單元測試項目中將文件從資產復制到/ sdcard時,出現“打開文件:EACCES(權限被拒絕)”錯誤。 我花了最后兩個小時來疏通搜索並嘗試許多變體。 可能缺少一些愚蠢的小細節,希望有人能看到它。
我正在使用ADT版本v22.3.0-887826。 構建目標是Google APIs 2.2平台。 嘗試4.4.2的結果相同。 AVD為4.4.2。
LogCat是:
MediaPlayerServiceTest(3324): copy test files
MediaPlayerServiceTest(3324): File copy testfile.mp3 exception. java.io.FileNotFoundException: /storage/sdcard/testfiles/testfile.mp3: open failed: EACCES (Permission denied)
我正在測試管理媒體播放器的服務,因此該課程是
public class MediaPlayerServiceTest extends ServiceTestCase<MediaPlayerService>
該代碼是微不足道的。 請注意,canWrite()方法必須返回true。
Log.i(TAG,"copy test files");
File sdcard = Environment.getExternalStorageDirectory();
if (sdcard == null) {
Log.i(TAG,"no sdcard");
} else {
if (sdcard.canWrite()) {
Log.i(TAG,"cannot write to sdcard");
} else {
final String fileName = "BBPro_Confirm.mp3";
final String dest = sdcard.getAbsolutePath() + "/testfiles/" + fileName;
if (new File(dest).exists()){
Log.d(TAG, "No need to copy file " + fileName);
} else {
try {
InputStream localInputStream = mTestAppContext.getAssets().open(fileName);
FileOutputStream outFile = new FileOutputStream(dest);
} catch (IOException localIOException) {
Log.d(TAG, "File copy " + fileName + " exception. " + localIOException.toString());
}
}
}
}
嘗試了許多關於使用許可的變化。 當前清單:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="zookey.GPS.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="zookey.GPS" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
</manifest>
我可以從adb訪問sdcard並創建一個testfiles子目錄以驗證是否可以更新它。 訪問/ storage / sdcard /時不相關,但也嘗試重新安裝sdcard並使用/ sdcard /。
root@generic:/storage/sdcard # ls -l
ls -l
drwxrwx--- root sdcard_r 2014-02-15 13:06 Alarms
drwxrwx--x root sdcard_r 2014-02-15 13:07 Android
drwxrwx--- root sdcard_r 2014-02-15 13:06 DCIM
drwxrwx--- root sdcard_r 2014-02-15 13:06 Download
drwxrwx--- root sdcard_r 2014-02-15 13:05 LOST.DIR
drwxrwx--- root sdcard_r 2014-02-15 13:06 Movies
drwxrwx--- root sdcard_r 2014-02-15 13:06 Music
drwxrwx--- root sdcard_r 2014-02-15 13:06 Notifications
drwxrwx--- root sdcard_r 2014-02-15 13:06 Pictures
drwxrwx--- root sdcard_r 2014-02-15 13:06 Podcasts
drwxrwx--- root sdcard_r 2014-02-15 13:06 Ringtones
drwxrwx--- root sdcard_r 2014-02-15 13:24 testfiles
root@generic:/storage/sdcard #
我成功地將文件推送到/ storage / sdcard:
C:\Users\Bruce\android-sdks\platform-tools>adb -s emulator-5554 push F:\BBPro_link.mp3 /storage/sdcard/testfiles
100 KB/s (5464 bytes in 0.053s)
多次重建ADV。 等等等等
任何建議將非常有幫助。
插入清單文件中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
解決方案是在我的主應用程序中創建一個小型服務來復制文件。 在設置過程中從單元測試中調用此服務。 使用if來防止在每個測試設置中復制文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.