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, 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?
3 Réponses :
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' }
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)
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));
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é?
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.
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?