9

撮影した写真のURIを解析してアクティビティをトリミングする際に問題が発生しています。私のアプリケーションでは、ユーザーは写真を撮るか、ギャラリーから写真を選択してトリミングし、アップロードすることができます。すべてが簡単に聞こえます。

ギャラリーから選択すると、ギャラリーアプリは次のように選択した写真のURIを返します。

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

次のコードを使用して、この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 "content://..."で新しい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はGalleryアプリのURIに似ていますが、新しいURIでCrop Activityを開始すると、次の例外が発生します。

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。Gallery Appの新しいURIとURIが同じ「content:// ...」であるにもかかわらず、CropActivityが新しいUriでの作業を拒否する理由2.CropActivity
を呼び出して写真をトリミングするにはどうすればよいですか。パスしかわからないSDカード?

私はグーグルしようとしましたが、それでも運がありません。
英語が下手でごめんなさい。ありがとうございました。

4

1 に答える 1

30

私は持っていましたがintent.setType("image/*");、それでも機能しませんでした...

私にとってそれを解決したのは、以下を使用していたことです。 intent.setDataAndType(tempImageURI, "image/*");

幸運を!

于 2012-08-13T20:52:55.357 に答える