2015-12-02 1 views
0

Ceci est mon AndroidManifest:ne peut pas écrire sur la mémoire du téléphone sur Android 6

<permission 
    android:name="nl.hgrams.passenger.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.LOCATION_HARDWARE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_GPS" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
<uses-permission android:name="android.permission.VIBRATE"/> 
<uses-permission android:name="android.permission.GET_TASKS"/> 
<uses-permission android:name="android.permission.WAKE_LOCK"/> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="nl.hgrams.passenger.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" /> 

Et ceci est l'erreur que je reçois dans logcat:

12-02 10:03:30.532: W/System.err(11348): java.io.IOException: open failed: EACCES (Permission denied) 
12-02 10:03:30.532: W/System.err(11348): at java.io.File.createNewFile(File.java:939) 
12-02 10:03:30.532: W/System.err(11348): at nl.hgrams.passenger.utils.Utils.appendLog(Utils.java:829) 
12-02 10:03:30.532: W/System.err(11348): at nl.hgrams.passenger.PSLocationCenter.onCreate(PSLocationCenter.java:233) 
12-02 10:03:30.532: W/System.err(11348): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) 
12-02 10:03:30.532: W/System.err(11348): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707) 
12-02 10:03:30.532: W/System.err(11348): at android.app.ActivityThread.-wrap1(ActivityThread.java) 
12-02 10:03:30.532: W/System.err(11348): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) 
12-02 10:03:30.532: W/System.err(11348): at android.os.Handler.dispatchMessage(Handler.java:102) 
12-02 10:03:30.532: W/System.err(11348): at android.os.Looper.loop(Looper.java:148) 
12-02 10:03:30.532: W/System.err(11348): at android.app.ActivityThread.main(ActivityThread.java:5417) 
12-02 10:03:30.532: W/System.err(11348): at java.lang.reflect.Method.invoke(Native Method) 
12-02 10:03:30.532: W/System.err(11348): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
12-02 10:03:30.533: W/System.err(11348): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
12-02 10:03:30.533: W/System.err(11348): Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied) 
12-02 10:03:30.533: W/System.err(11348): at libcore.io.Posix.open(Native Method) 
12-02 10:03:30.533: W/System.err(11348): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
12-02 10:03:30.533: W/System.err(11348): at java.io.File.createNewFile(File.java:932) 
12-02 10:03:30.533: W/System.err(11348): ... 12 more 
12-02 10:03:30.535: W/System.err(11348): java.io.FileNotFoundException: /storage/emulated/0/Passenger/passenger_log.txt: open failed: EACCES (Permission denied) 
12-02 10:03:30.535: W/System.err(11348): at libcore.io.IoBridge.open(IoBridge.java:452) 
12-02 10:03:30.535: W/System.err(11348): at java.io.FileOutputStream.<init>(FileOutputStream.java:87) 
12-02 10:03:30.535: W/System.err(11348): at java.io.FileWriter.<init>(FileWriter.java:58) 
12-02 10:03:30.535: W/System.err(11348): at nl.hgrams.passenger.utils.Utils.writeToLog(Utils.java:905) 
12-02 10:03:30.535: W/System.err(11348): at nl.hgrams.passenger.utils.Utils.appendLog(Utils.java:849) 
12-02 10:03:30.535: W/System.err(11348): at nl.hgrams.passenger.PSLocationCenter.onCreate(PSLocationCenter.java:233) 
12-02 10:03:30.535: W/System.err(11348): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) 
12-02 10:03:30.535: W/System.err(11348): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707) 
12-02 10:03:30.535: W/System.err(11348): at android.app.ActivityThread.-wrap1(ActivityThread.java) 
12-02 10:03:30.535: W/System.err(11348): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) 
12-02 10:03:30.535: W/System.err(11348): at android.os.Handler.dispatchMessage(Handler.java:102) 
12-02 10:03:30.535: W/System.err(11348): at android.os.Looper.loop(Looper.java:148) 
12-02 10:03:30.536: W/System.err(11348): at android.app.ActivityThread.main(ActivityThread.java:5417) 
12-02 10:03:30.536: W/System.err(11348): at java.lang.reflect.Method.invoke(Native Method) 
12-02 10:03:30.536: W/System.err(11348): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
12-02 10:03:30.536: W/System.err(11348): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
12-02 10:03:30.536: W/System.err(11348): Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied) 
12-02 10:03:30.536: W/System.err(11348): at libcore.io.Posix.open(Native Method) 
12-02 10:03:30.536: W/System.err(11348): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
12-02 10:03:30.536: W/System.err(11348): at libcore.io.IoBridge.open(IoBridge.java:438) 
12-02 10:03:30.536: W/System.err(11348): ... 15 more 

je trouve que je dois faire , pour les déclarer dans l'API 23+:

private static final int REQUEST_EXTERNAL_STORAGE = 1; 
private static String[] PERMISSIONS_STORAGE = { 
    Manifest.permission.READ_EXTERNAL_STORAGE, 
    Manifest.permission.WRITE_EXTERNAL_STORAGE 
}; 

mais il ne reconnaît pas les permissions si je les ai définies comme ça.

cannot resolve symbol Manifest.permission.Read/Write...

Répondre

1

Essayez ce code

import android.Manifest; 
import android.app.Activity; 
import android.support.v4.app.ActivityCompat; 

public class ClassName { 

private static final int REQUEST_EXTERNAL_STORAGE = 1; 

    private static String[] PERMISSIONS_STORAGE = { 
      Manifest.permission.READ_EXTERNAL_STORAGE, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE 
    }; 

    public void requestPermissions(Activity activity) { 
     ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE); 
    } 
} 

Il travaille pour moi.

0

À partir de Android 6.0 (niveau API 23), les utilisateurs accordent des autorisations aux applications lorsque l'application est en cours d'exécution, pas quand ils installer l'application. Cette approche rationalise le processus d'installation de l'application, car l'utilisateur n'a pas besoin d'accorder des autorisations lorsqu'il installe ou met à jour l'application. Il donne également à l'utilisateur plus de contrôle sur les fonctionnalités de l'application; par exemple, un utilisateur peut choisir d'autoriser une application de caméra à accéder à la caméra mais pas à l'emplacement de l'appareil. L'utilisateur peut révoquer les autorisations à tout moment en accédant à l'écran Paramètres de l'application.

source de http://developer.android.com/intl/es/training/permissions/requesting.html

utilisateur doit fournir des autorisations manuellement en allant dans Paramètres-> apps-> app_name-> permission ou vous devez demander manuellement des autorisations lors de l'exécution de l'application d'un programme.

+0

J'ai essayé le code à partir de là et il dit pour: Manifest.permission.READ_EXTERNAL_STORAGE symbole non résolu. Même si je l'ai dans mon manifeste. seule l'autorisation qui apparaît est MAPS_RECEIVE. Dois-je aussi faire cela pour les autres permissions?

+0

peut vous montrer quelques journaux –

+0

Devait ajouter les autorisations comme celui-ci, de sorte qu'ils sont visibles: