android设置图像作为联系人图标/壁纸

时间:2011-09-02 13:30:28

标签: android image viewer

我已经编写了自己的ImageViewer,现在我希望像Android原生ImageViewer一样拥有设置为功能。我现在有可能,因为Facebook有它。我附上了截图,让自己更加清晰。 enter image description here

P.S。我想更详细地解释出现了什么问题。在菜单中选择“联系人图标”后,将显示我的联系人列表。当我选择联系人时,申请人关闭。如果我选择“Home / Lock screen wallpaper”,它会打开我手机的图库。 这是我的代码片段:

                Bitmap icon = mBitmap;
                Intent setAs = new Intent(Intent.ACTION_ATTACH_DATA);
                setAs.setType("image/jpg");
                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                icon.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
                File f = new File(Environment.getExternalStorageDirectory() + File.separator + "/my_tmp_file.jpg");
                try {
                    f.createNewFile();
                    FileOutputStream fo = new FileOutputStream(f);
                    fo.write(bytes.toByteArray());
                } catch (IOException e) {                       
                    e.printStackTrace();
                }
                setAs.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/my_tmp_file.jpg"));
                startActivity(Intent.createChooser(setAs, "Set Image As"));

我还添加了对我的清单的后续权限,我可以将我的图像写入手机的SD卡。

LogCat Output

5 个答案:

答案 0 :(得分:4)

来自Google Gallery app source code

// Called when "Set as" is clicked.
private static boolean onSetAsClicked(MenuInvoker onInvoke,
                                      final Activity activity) {
    onInvoke.run(new MenuCallback() {
        public void run(Uri u, IImage image) {
            if (u == null || image == null) {
                return;
            }

            Intent intent = Util.createSetAsIntent(image);
            activity.startActivity(Intent.createChooser(intent,
                    activity.getText(R.string.setImage)));
        }
    });
    return true;
}

来自Utils.java

// Returns an intent which is used for "set as" menu items.
public static Intent createSetAsIntent(IImage image) {
    Uri u = image.fullSizeImageUri();
    Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
    intent.setDataAndType(u, image.getMimeType());
    intent.putExtra("mimeType", image.getMimeType());
    return intent;
}

答案 1 :(得分:3)

查看联系人应用代码。有一个AttachImage活动会启动以附加图像。图标照片应为96x96像素尺寸。 action...CROP会对您传递的图像进行面部检测和裁剪。

链接:AttachImage.java

您应该将图像缩放并裁剪为96x96,并将其URI传递给insertPhoto活动中使用的AttachImage方法。

如需更改壁纸,请参阅此question的答案。

更新

启动种植活动的代码:

Intent intent = new Intent("com.android.camera.action.CROP", myIntent.getData());
if (myIntent.getStringExtra("mimeType") != null) {
   intent.setDataAndType(myIntent.getData(), myIntent.getStringExtra("mimeType"));
}
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 96);
intent.putExtra("outputY", 96);
intent.putExtra("return-data", true);
startActivityForResult(intent, REQUEST_CROP_PHOTO);

答案 2 :(得分:1)

您只需使用WallpaperManager设置壁纸。

WallpaperManager.getInstance(this).setBitmap(mBitmap);

答案 3 :(得分:0)

将图像设置为(联系人,壁纸等)

        Intent setAs = new Intent(Intent.ACTION_ATTACH_DATA);
        setAs.setType("image/jpg");
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        File f = new File(Environment.getExternalStorageDirectory()
                + File.separator + "/my_tmp_file.jpg");
        try {
            f.createNewFile();
            FileOutputStream fo = new FileOutputStream(f);
            fo.write(bytes.toByteArray());
        } catch (IOException e) {
            e.printStackTrace();
        }

        setAs.setDataAndType(Uri.parse("file:///sdcard/my_tmp_file.jpg"),
                "image/jpg");
        setAs.putExtra("mimeType", "image/jpg");
        startActivity(Intent.createChooser(setAs, "Set Image As"));

这将解决您的问题并将图像设置为(联系人,壁纸等)

答案 4 :(得分:0)

使用此代码

File externalFile=new File("filePath");
Uri sendUri = Uri.fromFile(externalFile);
    Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
            intent.setDataAndType(sendUri, "image/jpg");
            intent.putExtra("mimeType", "image/jpg");
            startActivityForResult(Intent.createChooser(intent, "Set As"), 200);