Android установить изображение в качестве значка контакта / обои - PullRequest
6 голосов
/ 02 сентября 2011

Я написал свой собственный ImageViewer, и теперь я хочу, чтобы был установлен как функциональность, как в родном Android ImageViewer.Я теперь это возможно, так как Facebook имеет это.Я приложил скриншот, чтобы сделать себя более ясным.enter image description here

PS Я хочу дать более подробное объяснение того, что идет не так.После того, как я выберу «Значок контакта» в меню, появится список моих контактов.Когда я выбираю контакт, приложение закрывается.Если я выберу «Обои для рабочего стола / Блокировка экрана», откроется галерея моего телефона.Вот мой фрагмент кода:

                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 ]

4 голосов
/ 05 сентября 2011

Из исходного кода приложения Google Gallery :

// 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;
}
3 голосов
/ 06 сентября 2011

Посмотрите на код приложения контактов.Для прикрепления изображения запускается действие 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);
1 голос
/ 10 сентября 2011

Вы можете просто использовать WallpaperManager , чтобы установить обои.

WallpaperManager.getInstance(this).setBitmap(mBitmap);
0 голосов
/ 01 июля 2015

используйте этот код

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);
0 голосов
/ 16 апреля 2015

Для Установить изображение как (Контакт, обои и т. Д.)

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

Это решит вашу проблему и установить изображение как (Контакт, Обои и т. Д.)

...