2012-12-03 12 views
5

Czy można w jakiś sposób ustawić programowo Live Wallpaper za pomocą mojej aplikacji?Automatyczne ustawianie animowanej tapety na urządzeniu z dostępem korzennym Android

Pracuję nad aplikacją, której celem jest wybranie niektórych z zainstalowanych animowanych tapet na urządzeniu i ustawienie go jako tapety na żywo. To działanie należy wykonać za pośrednictwem mojej aplikacji.

W trakcie badania znalazłem odpowiedzi, które można uzyskać dzięki rootowaniu urządzenia z Androidem.

Czy ktoś może mi pomóc, jak to zrobić dokładnie?

Odpowiedz

5

System Android OS przed Jelly Bean nie pozwala programowo ustawić tapety na żywo. Na razie Jelly Bean obsługuje zmianę Live Wallpaper rozwiązań programowych bez interakcji użytkownika

+0

Czy możesz podać przykład, jak to zrobić? Mam listę wszystkich Live Wallpapers za pośrednictwem mojej aplikacji i mam ich nazwy pakietów gotowe, więc jak zatrzymać obecny LiveWallpaper i rozpocząć nowy? – Naskov

+1

Proszę spojrzeć na http://stackoverflow.com/questions/12842924/how-do-i-move-to-live-wallpaper-preview-from-app –

+1

to pytanie dotyczy ustawienia własnego Live Wapplaper, ale ja pytam o zmianę Zainstalowane tapety na żywo za pośrednictwem mojej aplikacji? Czy możesz tu odpowiedzieć? – Naskov

3

przykro złamać go do ba Sayers, ale jest możliwe, aby ustawić na żywo tapety programowo BEZ interakcji użytkownika. To wymaga:

  1. Twoja aplikacja będzie układ uprzywilejowanych
  2. <uses-permission android:name="android.permission.SET_WALLPAPER_COMPONENT" />
  3. odbicie Java (kod Super hacking)
  4. Odniesienie klasa do żądanej WallpaperService (Live Wallpaper)

UWAGA: Dla pozycji 3 użyłem własnej tapety na żywo, MyWallpaperService klasa

Można to zrobić tylko wtedy, gdy aplikacja jest systemem uprzywilejowanych i ma to uprawnienie w manifeście:

<uses-permission android:name="android.permission.SET_WALLPAPER_COMPONENT" /> 

Teraz, przy użyciu odbicia można wywołać ukryte metody WallpaperManager ręcznie ustawić na żywo tapety :

WallpaperManager manager = WallpaperManager.getInstance(context); 
Method method = WallpaperManager.class.getMethod("getIWallpaperManager", null); 
Object objIWallpaperManager = method.invoke(manager, null); 
Class[] param = new Class[1]; 
param[0] = ComponentName.class; 
method = objIWallpaperManager.getClass().getMethod("setWallpaperComponent", param); 

//get the intent of the desired wallpaper service. Note: I created my own 
//custom wallpaper service. You'll need a class reference and package 
//of the desired live wallpaper 
Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE); 
intent.setClassName(context.getPackageName(), MyWallpaperService.class.getName()); 

//set the live wallpaper (throws security exception if you're not system-privileged app) 
method.invoke(objIWallpaperManager, intent.getComponent()); 

Zapoznaj się z kodem źródłowym:

+1

Jeśli aplikacja ma uprzywilejowane systemy, potrzebujesz zrootowanego urządzenia? – yelliver

+0

Trudno uzyskać przywilej systemu aplikacji innej firmy bez urządzenia zrootowanego, ponieważ potrzebujesz uprawnienia systemu plików. Ale możesz być w stanie ominąć to. Jeśli możesz uruchomić "Remont adb" na swoim urządzeniu, możesz bawić się z systemem plików, aby uprościć system aplikacji. Jeśli nie możesz skorzystać z opcji "Remont adb", możesz również spróbować, aby zezwolić na tymczasowe zezwolenie: http://stackoverflow.com/a/13366444/3992997. – kpninja12

+0

Bracie naprawdę potrzebuję kodu źródłowego LiveWallpaper, proszę, poprowadź mnie lub dostarcz, proszę. –

Powiązane problemy