2012-05-17 18 views
9

Alınan fotoğrafın ayrıştırılması için çekilen fotoğrafın ayrıştırılmasıyla ilgili bir sorunla karşılaşıyorum. Uygulamamda, kullanıcılar bir fotoğraf çekebilir veya galeriden bir tane seçebilir, ardından kırpabilir ve yükleyebilir. Her şey basit geliyor. Galeriden seçim, Galeri uygulaması böyle seçilen fotoğraf için bir URI dönmekAndroid: Fotoğraf çekildikten sonra mahsul faaliyeti çağrısı

: kodunu izleyerek

content://media/external/images/media/20 

Bu uri ile ekin etkinliği başlatmak, herşey yolunda görünüyor:

Intent intent = new Intent("com.android.camera.action.CROP"); 
intent.setData(uri); 
intent.putExtra("outputX", 96); 
intent.putExtra("outputY", 96); 
intent.putExtra("aspectX", 1); 
intent.putExtra("aspectY", 1); 
intent.putExtra("scale", true); 
intent.putExtra("return-data", true);    
startActivityForResult(intent, REQUEST_CODE_CROP); 

Ama Bir fotoğraf çektiğimde, fotoğrafın yolunu şu şekilde öğrenebilirim:

file:///mnt/sdcard/iBet88.us/IMAGE_20120517_151606.jpg 

ve Crop Etkinlik bu uri'yi kabul etmeyecektir. Şeması yeni uri olsun sonra ContentProvider için yeni yakalanan fotoğraf eklemek ve: başka İçerik Sağlayıcı ile yolu denedim "içeriği: // ..." Aşağıdaki kodu:

// TODO insert to Content Provider 
ContentResolver cr = getContentResolver(); 
ContentValues contentValues = new ContentValues(); 
contentValues.put(MediaStore.Images.Media.DATA, avatarFilePathTmp.getPath()); 
contentValues.put(MediaStore.Images.Media.IS_PRIVATE, 0); 
cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); 

// TODO get id from Content Provider 
String[] projection = { 
    MediaStore.Images.Media._ID, 
    MediaStore.Images.Media.DATA 
}; 
String selectionClause = "" + MediaStore.Images.Media.DATA + " = ?"; 

String[] selectionArgs = {avatarFilePathTmp.getPath()}; 
Cursor mCursor = getContentResolver().query(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
    projection, 
    selectionClause, 
    selectionArgs, 
    ""); 

Uri uri = null;  
if (null == mCursor) { 

} else if (mCursor.getCount() < 1) { 

} else { 
    mCursor.moveToFirst(); 
    int id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Images.Media._ID)); 

    String u = "content://media/external/images/media/" + id; 

    // create new Uri 
    uri = Uri.parse(u); 
} 

Benim yeni Uri uri benzer

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.android.camera.action.CROP dat=content://media/external/images/media/20 (has extras) } 

Sorularım: yeni Uri ile Mahsul Aktivite başlattığınızda Galeri uygulamasından, ama, bu özel durum almak Mahsul Etkinlik rağmen benim yeni Uri ile çalışmak reddediyor Neden
1. benim yeni Uri ve Galeri Uygulaması'ndan uri aynı "içerik: // ..."
2. Fotoğrafı yalnızca yolunu bildiğim sdcard içinde kırpmak için Mahsul Etkinliği'ni nasıl arayabilirim?

Google'a denedim ama yine de şansım yok.
Kötü ingilizcem için özür dilerim. Teşekkür ederim. intent.setDataAndType(tempImageURI, "image/*");

İyi şanslar: Beni kullanıyordum için çözüldü Ne

+0

Bu sizin için işe yarıyor mu? – Darpan

cevap

30

ben intent.setType("image/*"); vardı ve hala işe yaramadı ...

!

+1

tempImageURI'yi nerede ve nasıl kullanıyorsunuz? – erdomester

+1

bu cevap doğru. Ayrı satırlarda intent.setType ("image/*") ve intent.setData (uri) ve sadece galeriden seçilen bir görüntü vardı. SetDataAndType (uri, "image/*") kullanarak, Astro ve Dropbox gibi diğer uygulamalarla çalıştı. – jfortunato

İlgili konular