2017-04-13 4 views
0

J'essaie d'implémenter une application qui aide l'utilisateur à capturer une photo et à la recadrer ou à la recadrer, l'application fonctionne avec succès dans Android 4.4 mais quand essayer de la tester dans un autre appareil 5.1 et sélectionnez l'option de sauvegarde avec le message suivant unfortunately gallery has stopped le code suivant comment je commence à recadrer.Galerie s'est arrêté

public void ImageCropFunction() { 
    try { 
     CropIntent = new Intent("com.android.camera.action.CROP"); 
     CropIntent.setDataAndType(uri, "image/*"); 
     CropIntent.putExtra("crop", "true"); 
     CropIntent.putExtra("scaleUpIfNeeded", true); 
     CropIntent.putExtra("return-data", true); 
     startActivityForResult(CropIntent, 1); 
    } catch (ActivityNotFoundException e) { 

    } 
    } 

et pour l'image de prendre de la caméra

public void ClickImageFromCamera() { 

    CamIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

    file = new File(Environment.getExternalStorageDirectory(), 
     "file" + String.valueOf(System.currentTimeMillis()) + ".jpg"); 
    uri = Uri.fromFile(file); 
    CamIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri); 
    CamIntent.putExtra("return-data", true); 
    startActivityForResult(CamIntent, 0); 
    } 

et pour l'image de sélection de la galerie

public void GetImageFromGallery() { 

    GalIntent = new Intent(Intent.ACTION_PICK, 
     android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(Intent.createChooser(GalIntent, "Select Image From Gallery"), 2); 
    } 

et demander exécuter l'autorisation de temps à l'aide

public void EnableRuntimePermission() { 
    if (ActivityCompat.shouldShowRequestPermissionRationale(StartUp.this, 
     Manifest.permission.CAMERA)) { 
     Toast.makeText(StartUp.this, "CAMERA permission allows us to Access CAMERA app", Toast.LENGTH_LONG).show(); 
    } else { 
     ActivityCompat.requestPermissions(StartUp.this, new String[]{ 
      Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, 
      Manifest.permission.READ_EXTERNAL_STORAGE,}, RequestPermissionCode); 
    } 
    } 

et pour résultat get de ramasser ima ge ou demande la permission

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 0 && resultCode == RESULT_OK) { 
     ImageCropFunction(); 
    } else if (requestCode == 2) { 
     if (data != null) { 
     uri = data.getData(); 
     ImageCropFunction(); 
     } 
    } else if (requestCode == 1) { 
     if (data != null) { 
     Bundle bundle = data.getExtras(); 
     Bitmap bitmap = bundle.getParcelable("data"); 
     this.bitmap = bitmap; 
     imageView.setImageBitmap(bitmap); 
     buttonDetect.setVisibility(View.VISIBLE); 
     } 
    } 
    } 

Logcat ne montrent aucun problème après l'accident se produire que montrer l'

START INPUT: com.android.internal.policy.impl.PhoneWindow$DecorView 

Quelqu'un peut-il aider?

+0

'catch (ActivityNotFoundException e) { }'? Vide? Mettez le habituel e.printStackTrace() et un Toast() où vous montrez e.getMessage() à l'utilisateur. Maintenant, votre utilisateur et vous ne savez pas ce qui se passe. – greenapps

+0

'et pour obtenir le résultat de la sélection de l'image ou de l'autorisation de la demande' Vous ne pouvez pas utiliser onActivityResult pour obtenir une autorisation. Il ne sera pas appelé si vous en avez un. Implémentez onRequestPermissionsResult() à la place. – greenapps

+0

@greenapps pour 'catch (ActivityNotFoundException e) {}' je l'essaie mais ne montre pas en question et toast n'apparaissent pas aussi. pour obtenir la permission que je veux dire vérifier la permission accordée ou non – Azak

Répondre

0

Android ne pas avoir l'intention de recadrer, mais les mêmes appareils prennent en charge la culture et d'autres pas. J'utilise this library pour la culture. pour résoudre ce problème.