2012-05-17 10 views
9

私は作物の活動に撮影された写真のURIを解析する際に問題に直面しています。私のアプリケーションでは、ユーザーは写真を撮ったり、ギャラリーから1つを選択して切り抜き、アップロードすることができます。すべてが簡単です。Android:写真を撮った後に作物活動を呼び出す

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

私はコードに従うことによって、このURIを持つ作物の活動を開始し、すべてがOKと思われる:ギャラリーからピック、ギャラリーアプリこのような選択された写真のURIを返す

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); 

しかし、写真を撮ると、次のような写真のパスしかわかりません:

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

とクロップアクティビティはこのURIを受け入れません。 私はコンテンツプロバイダと別の方法で試してみました:のContentProviderに、新たに撮影した写真を追加し、sheme「コンテンツ:// ...」で新しいURIを取得するコードを次の中からを:

// 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); 
} 

私の新しいウリはURIに似ています

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

私の質問:私は新しいウリとクロップ活動を開始するとギャラリーアプリから、しかし、私はこの例外を取得
1.作物の活動は、私にもかかわらず、私の新しいウリで動作することを拒否理由新しいウリギャラリーアプリケーションからのuriは同じ "content:// ..."
2.パスを知っているsdcardの写真をトリミングするには、Crop Activityを呼び出すにはどうすればよいですか?

私はGoogleにしようとしましたが、まだ運がありません。
私の悪い英語を申し訳ありません。ありがとうございました。 intent.setDataAndType(tempImageURI, "image/*");

幸運を:私が使用していたためにそれを解決した何

+0

それはあなたのために働いたか? – Darpan

答えて

30

私はintent.setType("image/*");を持っていたし、それはまだ動作しませんでした...

+1

どこでどのようにtempImageURIを使用していますか? – erdomester

+1

この回答は正しいです。 intent.setType( "image/*")とintent.setData(uri)が別々の行にあり、ギャラリーから選択された画像だけが働いていました。 setDataAndType(uri、 "image/*")を使用すると、AstroやDropboxなどの他のアプリも使用できました。 – jfortunato

関連する問題