2014-10-30 9 views
5

Ich habe in den letzten Wochen im Internet gesucht (ernsthaft) aber ich kann nicht finden, was ich brauche. Ich möchte nur eine Absicht starten, die der als Aktion entspricht. Es bietet in der Regel entweder Als Hintergrundbild oder Set als Kontaktbild. Und wenn auf dem Gerät mehr Anwendungen installiert sind, können diese ebenfalls aufgelistet werden. HierWie starte ich die "set as" Absicht (Wallpaper, Kontaktbild, etc)

ist ein Beispiel dafür, was ich will:

enter image description here

ich genau, dass ich brauche API Level 14 und höher zu unterstützen. Ich fand getCropAndSetWallpaperIntent, aber es funktioniert nur mit Inhalt URI, die ein Problem für mich ist, und ist nur verfügbar auf API lvl 19 und höher.

+0

möglich duplikat von [android set bild als kontakt icon/wallpaper] (http://stackoverflow.com/questions/7284142/android-set-image-as-contact-icon-wallpaper) – cygery

Antwort

12

fand ich die Antwort von mir selbst:

Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); 
intent.setDataAndType(imageUri, "image/*"); 
intent.putExtra("jpg", "image/*"); 
startActivityForResult(Intent.createChooser(intent, 
getString(R.string.set_as)), REQUEST_ID_SET_AS_WALLPAPER); 

Sie müssen nur sicherstellen, dass die uri ist öffentlich und wird von der Ernte Anwendung durch den Benutzer ausgewählt erreichbar sein.

+0

Es funktioniert gut für die Einstellung Das Hintergrundbild mit Startbildschirm-Option, aber es funktioniert nicht gut, während das Hintergrundbild für Lock Screen Option festgelegt wird. Warum? –

+1

Lock Screen Wallpaper sind nicht Teil von Android Stock. Es wird normalerweise von Smartphone-Herstellern hinzugefügt. Daher denke ich, dass der Hersteller die Lockscreen-Option zu dieser Absicht hinzufügen muss. Es gibt vielleicht einen Parameter, der eingestellt werden muss, um dies zu berücksichtigen, aber nichts, was ich weiß. – Kalvn

0

Diese Lösung funktionierte für mich mit Uri:

Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); 
intent.setDataAndType(contentUri, "image/*"); 
intent.putExtra("mimeType", "image/*"); 
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
startActivity(Intent.createChooser(
         intent, "Set as:")); 
0

Das ist für mich gearbeitet:

Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); 
intent.addCategory(Intent.CATEGORY_DEFAULT); 
//can't use normal URI, because it requires the Uri from file 
intent.setDataAndType(Uri.fromFile(new File(uriOfImage)),"image/*"); 
intent.putExtra("mimeType","image/*"); 
startActivity(Intent.createChooser(intent,"Set Image")); 

können Sie prüfen, ob der URI, die Sie weitergeben, sollten die enthalten 'file: //' Präfix (Ohne das geht es nicht).