Я пытался использовать и мой ApplicationContext
, и мой Service
Context
для доступа к внешнему каталогу. К сожалению, он продолжает возвращать null
, и LogCat сообщает, что ему не удалось создать внешний каталог. Я уверен, что у меня есть WRITE_STORAGE_PERMISSION
подарок, но он все равно не будет работать. Мое устройство работает под управлением API 10 (2.3.3) Vanilla Android. Есть идеи?
Вот мой манифест:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="droid.signboard" android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:name="SignboardApp">
<receiver android:name=".ApplicationStarter">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<action android:name="droid.signboard.LAUNCHER_START"></action>
</intent-filter>
</receiver>
<activity android:label="@string/app_name"
android:screenOrientation="landscape" android:launchMode="singleTop"
android:name=".view.Signboard">
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
</activity>
<service android:name=".controller.MasterControllerService">
<intent-filter>
<action
android:name="droid.signboard.LAUNCH_SERVICE_FROM_ACTIVITY"></action>
</intent-filter>
</service>
</application>
</manifest>
и вот где код портится:
private boolean canWriteEx () {
String state = Environment.getExternalStorageState ();
if (state.equals (Environment.MEDIA_MOUNTED)) {
Log.i (TAG, "Can write to external directory: "
+ context.getExternalFilesDir (null).getAbsolutePath ());
return true;
} else {
Log.i (TAG, "Cannot write to external directory: "
+ context.getExternalFilesDir (null).getAbsolutePath ());
return false;
}
}
Код - это метод Runnable
, который вызывается Service
. Конструктор Runnable
принимает Context
в качестве параметра. Это Context
, используемый кодом. Код вызывает исключение при вызове журнала, что завершается успешно , подразумевая, что внешнее хранилище присутствует и доступно.
ОБНОВЛЕНИЯ ПРОШЕДШИХ ИСПРАВЛЕНИЙ:
Чистая установка не работает.
Возвращение к API 9 не работает, хотя и раньше.