Ne peut pas créer des Fichiers Externes Dir en Android. WRITE_EXTERNAL_STORAGE est présent
J'ai essayé d'utiliser mon ApplicationContext
et mon appel Service
's Context
pour accéder au répertoire externe. Malheureusement, il conserve son retour null
, et LogCat rapports, il était impossible de créer le répertoire externe. Je suis sûr que j'ai le WRITE_STORAGE_PERMISSION
présent, mais cela ne fonctionne toujours pas. Mon appareil est en cours d'exécution de l'API 10 (2.3.3) de vanille android. Des idées?
Voici mon manifeste:
<?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>
et c'est là que le code des mess:
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;
}
}
Le code est une méthode d'un Runnable
, qui est appelé par un Service
. Le constructeur de la Runnable
prend un Context
comme paramètre. C'est le Context
utilisé par le code. Le code génère une exception dans le Journal d'appel qui réussit, ce qui implique que le stockage externe est présent et disponible.
MISES À JOUR DE LA TENTATIVE DE CORRECTIFS:
Une nouvelle installation ne fonctionne pas.
Revenant vers le bas à l'API 9 ne fonctionne pas, si elle a fonctionné auparavant.
Poster votre code, et les traces de pile. sans elle, tout ce que nous pouvons faire est de deviner coups de feu dans l'obscurité.
Qu'essayez-vous de faire? Pourquoi êtes-vous en appelant le contexte.getExternalFilesDir (null)? Dites-nous le but et nous pourrions le but de mieux vous. Aussi, la trace de la pile de votre logcat serait utile.
Je suis en train de télécharger un fichier sur le net, dans mon périphérique de stockage externe dir. Ce sera exécutée par un service, et doivent s'exécuter de manière asynchrone de tout le reste de l'application. Pour ce faire, je suppose que j'ai besoin d'une connexion et d'accès de stockage externe. J'ai passé un
Context
à la Runnable
qui prépare le DownloadManager.Request
faire ces. Je vérifie de stockage externe en premier, mais il échoue ici, même si Environment.getStorageState ()
œuvres.J'ai été voir ce problème ainsi, sur 2.3.3 et 4.0. Semble que l'appareil est dans un état où il continuera de retourner la valeur null (ou peut-être la chaîne vide), et seulement un hard reset va le corriger. Le fait qu'il fonctionne la plupart du temps me fait penser à mon code/manifeste sont OK.
OriginalL'auteur cesar | 2011-09-28
Vous devez vous connecter pour publier un commentaire.
FIXE, mais je ne sais pas vraiment pourquoi cela fonctionne maintenant. Je le redémarrage de l'appareil, puis tout d'un coup, elle fonctionne de nouveau;
Context#getExternalFilesDir ()
a cessé de renvoyernull
. Même si cela fonctionne maintenant (merci et accessoires pourThe IT Crowd
's Roy et Moss), dois-je le signaler à Google ou quelque chose?OriginalL'auteur cesar
C'est un vieux thread mais je viens de tomber sur le même problème et trouvé la raison pour laquelle je suis surpris de voir n'est pas la plus courante. J'étais en train d'écrire pour le stockage externe, alors que mon appareil a été connecté à un ordinateur/Eclipse.. et j'avais l'erreur suivante,
C'est à partir du Guide du Développeur...
Simplement de démonter le téléphone de mon ordinateur/IDE résolu le problème pour moi.
Je n'ai pas eu ce problème - peut-être que vous n'avez pas défini d'options pour les développeurs dans les paramètres? J'utilise android 4.04 API 15. samsung S2.
Oh non, ce n'était pas définie. Ma solution finalement? De l'unité. Je ne peux pas supporter android natif de programmation plus longtemps. Et comme un avantage supplémentaire? Je peux compiler le même code pour Apple.
OriginalL'auteur Todd Painton
Vous devez avoir la WRITE_EXTERNAL_STORAGE autorisation de votre AndroidManifest.xml. Au moins, c'est ce que résolu pour moi.
Ajouter la ligne
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
avant votre<application ...
ligne.il a déjà ce jeu d'autorisations.
C'est la chose la plus étrange, j'ai déplacé les autorisations de avant l'application de la ligne et ça fonctionne maintenant. Ne redémarrez inbetween mais fait que de nombreuses fois déjà. Merci.
J'ai été confronté exactement la même question, et cette solution a résolu pour moi, Thnx!
OriginalL'auteur Graham Rogers