0

L'appareil photo n'enregistre pas après avoir pris l'image dans Redmi 1s. Cela fonctionne très bien dans samsung j5-2016. J'essaie de prendre des photos et de télécharger sur le serveur. Avant de télécharger je suis en train de compresser l'image, donc j'ai besoin de nom de fichier et de chemin de fichier. Comment je reçois fileName est affiche dans la méthode de résultat d'activité.L'appareil photo n'épargne pas après la prise de l'image

Caméra Intention

val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) 
         if (takePictureIntent.resolveActivity(activity.packageManager) != null) { 
          startActivityForResult(takePictureIntent, 102) 
         } 

Dans téléphone samsung cela permet d'économiser l'image, donc je suis en mesure d'obtenir le fichier de uri. Mais à Redmi 1s je ne suis pas en mesure d'obtenir uri. Je pense qu'il semble que redmi ne sauve pas l'image prise, donc je ne suis pas en mesure d'obtenir le fichier. onActivityResult en fragments affiche comme:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 
     super.onActivityResult(requestCode, resultCode, data) 
     if (requestCode == 102) && resultCode == Activity.RESULT_OK && data != null) { 
     val uri = data.data 

       val mimeType = activity.contentResolver.getType(uri) 
       if (mimeType == null) { 
        val path = getPath(uri) 
        if (path == null) { 
         fileName = FilenameUtils.getName(uri.toString()) 
        } else { 
         val file = File(path) 
         fileName = file.getName() 
        } 
       } else { 
        val returnUri = data.getData() 
        val returnCursor = activity.contentResolver.query(returnUri, null, null, null, null) 
        val nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME) 
        val sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE) 
        returnCursor.moveToFirst() 
        fileName = returnCursor.getString(nameIndex) 
        val size = Long.toString(returnCursor.getLong(sizeIndex)); 
       } 
} 
    } 

j'obtiens erreur dans

val mimeType = activity.contentResolver.getType(uri) 

ErrorLog

08-23 17:17:52.039 12008-12008/? W/System.err: java.lang.NullPointerException 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.content.ContentResolver.acquireExistingProvider(ContentResolver.java:1405) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.content.ContentResolver.getType(ContentResolver.java:304) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at in.motiontech.wave.fragment.ReviewOrderFragment.onActivityResult(ReviewOrderFragment.kt:396) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:164) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.app.Activity.dispatchActivityResult(Activity.java:5434) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.app.ActivityThread.deliverResults(ActivityThread.java:3363) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3410) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.app.ActivityThread.access$1300(ActivityThread.java:141) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1260) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
08-23 17:17:52.039 12008-12008/? W/System.err:  at android.os.Looper.loop(Looper.java:136) 
08-23 17:17:52.049 12008-12008/? W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5052) 
08-23 17:17:52.049 12008-12008/? W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
08-23 17:17:52.049 12008-12008/? W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
08-23 17:17:52.049 12008-12008/? W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 
08-23 17:17:52.049 12008-12008/? W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 
08-23 17:17:52.049 12008-12008/? W/System.err:  at dalvik.system.NativeStart.main(Native Method) 

Aidez-moi si je fais quelque chose de mal s'il vous plaît suggérer autre opt ion.

J'ai également regardé certains postes Stackoverflow mais pas en mesure de trouver réponse:

Camera Intent not saving photo

Camera is not saving after taking picture

Can not save camera's captured photo in application's "files" folder

Modifier J'ai aussi essayé suivante pour Caméra intention

val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) 
         val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) 
         var output = File(dir, System.currentTimeMillis().toString() + ".jpeg") 
         if (takePictureIntent.resolveActivity(activity.packageManager) != null) { 
          takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, output) 
          startActivityForResult(takePictureIntent, 102) 
         } 

Répondre

1

caméra ne sauve pas après la prise de l'image dans redmi 1s.

Il ne "sauvegarde" rien avec la plupart des applications d'appareil photo. Vous avez spécifiquement configuré votre ACTION_IMAGE_CAPTUREIntent pour ne pas enregistrer une photo n'importe où.

Cela fonctionne très bien dans Samsung j5-2016

uniquement parce que vous utilisez une application appareil photo buggy sur cet appareil.

ACTION_IMAGE_CAPTURE n'est pas censé renvoyer un Uri.Il a supposé faire une des deux choses:

  1. Si vous incluez EXTRA_OUTPUT sur la ACTION_IMAGE_CAPTUREIntent, l'application appareil photo est censé enregistrer une photo en pleine résolution à la Uri que vous fournissez dans cette

    supplémentaire
  2. Sinon, vous obtenez un retour Bitmap via getParcelableExtra("data") sur le retour Intent

Puisque vous n'avez pas EXTRA_OUTPUT, vous ne devriez pas vous attendre à ce qu'une photo en pleine résolution soit enregistrée n'importe où.

This sample app montre comment utiliser EXTRA_OUTPUT.

+0

Merci pour votre réponse, veuillez vérifier mon édition –

+0

@LalitJadav: Avez-vous ajusté votre 'onActivityResult()' pour regarder à l'emplacement que vous avez fourni à 'EXTRA_OUTPUT'? – CommonsWare

+0

Je pense qu'il renvoie uri .. –