0

ich mit Android Ernte Bild arbeiten, das ist mein Code für das Zuschneiden Bild:Android- Ernte Bild Ausführen funktioniert nicht richtig

private void performCrop() { 
    try { 
     Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
     //indicate image type and Uri 
     cropIntent.setDataAndType(picUri, "image/*"); 
     //set crop properties 
     cropIntent.putExtra("crop", "true"); 
     //indicate aspect of desired crop 
     cropIntent.putExtra("aspectX", 1); 
     cropIntent.putExtra("aspectY", 1); 
     //indicate output X and Y 
     cropIntent.putExtra("outputX", 500); 
     cropIntent.putExtra("outputY", 500); 
     //retrieve data on return 
     cropIntent.putExtra("return-data", true); 
     //start the activity - we handle returning in onActivityResult 
     startActivityForResult(cropIntent, PIC_CROP); 
    } catch (ActivityNotFoundException anfe) { 
     //display an error message 
     String errorMessage = "err"; 
     Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 

ich diesen Code getestet auf Android 4.2, 4.3 und das war keine Problem, aber auf Android 5,6, gibt es null Zeiger Ausnahme und ich weiß nicht warum.

Was ist falsch an diesem Code? Wie kann ich es mit allen Android-Versionen kompatibel machen?

+0

Vergewissern Sie sich, dass Sie das Berechtigungsmodell für Android 6 – Jai

+0

angewendet haben. Veröffentlichen Sie Ihr logcat –

Antwort

0
You can use according to Build SDK 
if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) { 
        performCrop(fileUri); 
       } else { 
        performCropImage(fileUri); 
       } 
// code for device below 5 
private boolean performCropImage(Uri mFinalImageUri) { 
     Uri mCropImagedUri; 
     try { 
      if (mFinalImageUri != null) { 
       //call the standard crop action intent (the user device may not support it) 
       Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
       //indicate image type and Uri 
       cropIntent.setDataAndType(mFinalImageUri, "image/*"); 
       //set crop properties 
       cropIntent.putExtra("crop", "true"); 
       //indicate aspect of desired crop 
       cropIntent.putExtra("aspectX", 1); 
       cropIntent.putExtra("aspectY", 1); 
       cropIntent.putExtra("scale", true); 
       // cropIntent.p 
       //indicate output X and Y 
       cropIntent.putExtra("outputX", 200); 
       cropIntent.putExtra("outputY", 200); 
       //retrieve data on return 
       cropIntent.putExtra("return-data", false); 

       File f = createNewFile("CROP_"); 
       try { 
        f.createNewFile(); 
       } catch (IOException ex) { 
        Log.e("io", ex.getMessage()); 
       } 

       mCropImagedUri = Uri.fromFile(f); 
       cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCropImagedUri); 
       //start the activity - we handle returning in onActivityResult 
       startActivityForResult(cropIntent, PIC_CROP); 
       return true; 
      } 
     } catch (ActivityNotFoundException anfe) { 
      //display an error message 
      String errorMessage = getString(R.string.crop_not_supported); 
      Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
      toast.show(); 
      return false; 
     } 
     return false; 
    } 
// code for 5 or 6 
private void performCrop(Uri picUri) { 
     try { 

      Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
      // indicate image type and Uri 
      cropIntent.setDataAndType(picUri, "image/*"); 
      // set crop properties 
      cropIntent.putExtra("crop", "true"); 
      // indicate aspect of desired crop 
      cropIntent.putExtra("aspectX", 1); 
      cropIntent.putExtra("aspectY", 1); 
      // indicate output X and Y 
      cropIntent.putExtra("outputX", 200); 
      cropIntent.putExtra("outputY", 200); 
      // retrieve data on return 
      cropIntent.putExtra("return-data", true); 
      // start the activity - we handle returning in onActivityResult 
      startActivityForResult(cropIntent, PIC_CROP); 
     } 
     // respond to users whose devices do not support the crop action 
     catch (ActivityNotFoundException anfe) { 
      // display an error message 
      String errorMessage = getString(R.string.crop_not_supported); 
      Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    } 

On ActivityResult put this code 

Uri imageUri = data.getData(); 
        try { 
         Bitmap selectedBitmap; 
         if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) { 
          Bundle extras = data.getExtras(); 
          selectedBitmap = extras.getParcelable("data"); 
         } else { 
          selectedBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); 

         } 


// I hope you this code help you 
Verwandte Themen