2017-06-28 4 views
0

comment enregistrer l'image dans l'application instantanéeComment enregistrer l'image dans l'application instantanée

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="***"> 
<uses-permission 
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission 
    android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 
<application android:allowBackup="true" 
    android:label="@string/app_name" 
    android:icon="@mipmap/ic_launcher" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"/> 

EasyPermissions.requestPermissions(this, "11", REQUEST_STORAGE_PERMISSION, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

java.io.FileNotFoundException:/stockage/émulé/0/Android/data/***/files/pic.jpg (Autorisation refusée)

Répondre

0

appliquer ce code sur votre appareil photo active pour obtenir des autorisations

takephoto.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (hasTakePermissions(getApplicationContext(), PERMISSIONS)) { 
       takePicture(); 
      } else { 
       ActivityCompat.requestPermissions(HomeActivity.this, PERMISSIONS, PERMISSION_ALL); 
      } 
     } 
    }); 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
     case REQUEST_WRITE_PERMISSION: 
      if (hasPermissions(getApplicationContext(), PERMISSIONS)) { 
       takePicture(); 
      } else { 
       ActivityCompat.requestPermissions(HomeActivity.this, PERMISSIONS, PERMISSION_ALL); 
      } 
    } 
} 
    public static boolean hasTakePermissions(Context context, String... permissions) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 

     for (String permission : permissions) { 
      if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 
+0

l'autorisation de la caméra a accordé et la caméra peut obtenir un aperçu, mais quand l'image de prise ne peut pas enregistrer – xixihaha

+0

pour ce cas, vous devez vérifier le format de chemin d'enregistrement d'image –

+0

quand je demande seulement la permission de WRITE_EXTERNAL_STORAGE , ne peut pas afficher le dialogue. Peut être l'application instantanée ne peut pas utiliser le stockage. – xixihaha

2

Vous ne pouvez pas accéder au stockage directement dans les applications instantanées. Ils fonctionnent sur un SandBox de sécurité de niveau supérieur. Les autorisations que vous avez accès sont les suivants:

BILLING 
ACCESS_COARSE_LOCATION 
ACCESS_FINE_LOCATION 
ACCESS_NETWORK_STATE 
CAMERA 
INSTANT_APP_FOREGROUND_SERVICE only in Android O. 
INTERNET 
READ_PHONE_NUMBERS only in Android O. 
RECORD_AUDIO 
VIBRATE 

Toute autre autorisation aura besoin de la version installée de votre application.

Cela signifie que vous ne pouvez pas lire ou écrire à partir du stockage public. Toutefois, vous pouvez accéder au fournisseur de contenu public exposé à une application instantanée, par exemple des sélecteurs de contacts ou des photopickers.

Source: FAQ officiel here

+0

Méfiez-vous que l'alternative de fournisseur de contenu pourrait ne pas être une approche valide. Selon "Fonctionnalités restreintes" et "Fonctionnalités non prises en charge", https://developer.android.com/topic/instant-apps/prepare.html#additional-reqs, les fournisseurs de contenu ne sont pas pris en charge. –