簡體   English   中英

android eclipse模擬器sdcard權限被拒絕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM