6

画像に「設定」機能を実装しようとしています。私はIntent.ATTACH_DATAを使用しているので、ユーザーは少なくとも連絡先の写真と壁紙を選択できます。私が渡すべきエキストラは私を混乱させます。ドキュメントを正しく読んだら、

Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
    intent.setType("image/*");
intent.setData(mImageCaptureUri);
        startActivity(Intent.createChooser(intent, "hey"));

すべてである必要があります。これは壁紙では機能しますが、メガピクセルデータでは、作物の活動が見つからなかったため、アプリがクラッシュします。誰かが実用的な例を持っていますか?公式ギャラリーアプリはなんとかcamera.cropアクティビティを見つけることができます...

手の込んだシステムインテントドキュメントを見つけるための一般的なヒントも歓迎します。

4

2 に答える 2

14

Android ソースの長く曲がりくねった道のりを経て、デフォルトのギャラリー (gallery3d) アプリで実際のコードを見つけました。私は自分のアプリケーションで使用するように適応し、他のアプリケーションでインポートするときに便利になるように再度書き直しました。これを使用または評価する場合は、この回答に賛成票を投じてください。

から適応:grepcodeのgallery3dソース

使用法: 写真のフル パス (/mnt/ で始まる) に一致するように最初の行を変更します。アクションチューザーのタイトルとして文字列「set_as」をstrings.xmlに追加します。

String absolutepath = MyApplication.appRootDir + relpath;//change for your application
    Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
    MimeTypeMap map = MimeTypeMap.getSingleton();
    String ext = absolutepath.substring(absolutepath.lastIndexOf('.') + 1);
    String mimeType = map.getMimeTypeFromExtension(ext);
    Uri uri = Uri.fromFile(new File(absolutepath));
    intent.setDataAndType(uri, mimeType);
    intent.putExtra("mimeType", mimeType);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    Activity activity = (Activity) this;
    activity.startActivity(Intent.createChooser(
            intent, activity.getString(R.string.set_as)));
于 2012-06-19T07:19:11.867 に答える