1
votes

Obtenir le bitmap de l'API Android uri <19

Je suis en train de coder un sélecteur de caméra personnalisé pour une application.

Voici comment je gère l'intention de la caméra:

Bitmap vBitmap = MediaStore.Images.Media.getBitmap( mActivity.getContentResolver(), vImageUri ); // get bitmap

Et comment je gère le résultat pour obtenir un bitmap :

@SuppressWarnings("ResultOfMethodCallIgnored")
@NonNull
private Intent getCameraIntent()
{
     mCurrentImageFileName = "image" + System.currentTimeMillis() + ".jpg"; // create a default jpg image
     File imagesDir = new File( mActivity.getFilesDir(), "images"); // init a images directory creation
     imagesDir.mkdirs(); // create images directory
     File vFile = new File( imagesDir, mCurrentImageFileName );
     try { vFile.createNewFile();  } catch (IOException e) { e.printStackTrace(); }

     Intent vCameraIntent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE ); // init the default camera intent
     String vAuthority = mActivity.getPackageName() + ".******"; // get path authority ( used to filter a specific folder )

    final Uri outputUri;

    if( Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT ) { outputUri = Uri.fromFile( vFile ); } // fix kitkat issue
    else { outputUri = FileProvider.getUriForFile( mActivity.getApplicationContext(), vAuthority, vFile ); }

    vCameraIntent.putExtra( MediaStore.EXTRA_OUTPUT, outputUri );

     LogUtils.setDebugLog( "debugOutputUri %s", "output uri is : " + outputUri );

     mActivity.grantUriPermission(
             "com.google.android.GoogleCamera",
             outputUri,
             Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION
     );
     return vCameraIntent;
 }

vImageUri est:

  • Dans l'API> 19: fichier: ///data/user/0/*****/files/images/image1548767548901.jpg
  • Dans l'API

Dans l'API> 19, getBitmap fonctionne parfaitement mais dans l'API renvoie toujours null .

Mon application a tout les autorisations requises


Quelqu'un peut-il m'aider s'il vous plaît?


1 commentaires

J'ai exactement ce problème entre api <= 19 et> 19 Vraiment pourquoi il renvoie null pour api <= 19? Avez-vous trouvé une solution pratique?


3 Réponses :


0
votes

Essayez Glide, il est compatible au-dessus du niveau d'API 14

Ajoutez des dépendances

Glide.with(this)
        .asBitmap()
        .load(path)
        .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
                imageView.setImageBitmap(resource);
            }
         });

puis ajoutez votre code

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.8.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
}


2 commentaires

Merci pour votre aide mais je ne veux pas afficher l'image, je veux obtenir la chaîne base64 du fichier, j'ai une méthode qui convertit une bitmap en chaîne base64


Hear target utilise uri pour obtenir des bitmaps. Nous n'avons que uri (dans onactivityResult)



0
votes

L'autre emplacement est un stockage interne. Pouvez-vous essayer ci-dessous

ContextWrapper cw = new ContextWrapper(context);
//path to /data/data/yourapp/app_data/dirName
File directory = cw.getDir("dirName", Context.MODE_PRIVATE);          
File mypath=new File(directory,"imagename.jpg");
Bitmap b = BitmapFactory.decodeStream(new FileInputStream(mypath));


4 commentaires

Il retourne également null


Ce fichier de chemin de fichier: ///data/data/*****/files/images/image1548767438290.jpg est correct, n'est-ce pas? De quel type de stockage s'agit-il également?


Il provient du stockage KitKat, je ne sais pas pourquoi, après avoir pris une photo, il a mis le contenu en données / données au lieu de données / utilisateur / 0


Je pense que c'est un emplacement externe.Pouvez-vous s'il vous plaît vérifier une fois les paramètres de votre caméra et vérifier l'emplacement de stockage configuré?



0
votes

J'ai trouvé une solution à ce problème. Pour obtenir Uri, vous devez utiliser deux méthodes différentes: 1- Dans la page de fonctionnement des api 19 et moins, vous devez utiliser Uri.fromFile () et 2- pour api> 19, veuillez utiliser Fournisseur de fichiers . Si vous utilisez cette instruction, toujours la méthode de

MediaStore.Images.Media.getBitmap () fonctionne bien et renvoie votre bitmap.


0 commentaires