5

私のアプリケーションを使用してプログラムでライブ壁紙を設定することはどういうわけか可能ですか?

私は彼女の目的がデバイスにインストールされているライブ壁紙のいくつかを選択し、それをライブ壁紙として設定することであるアプリケーションに取り組んでいます。このアクションは、アプリケーションを介して完了する必要があります。

私が調査していたとき、これはAndroidデバイスをroot化することで実行できるといういくつかの答えを見つけましたか?

誰かがそれを正確に行う方法を教えてもらえますか?

4

2 に答える 2

5

Jelly Bean より前の Android OS では、ライブ壁紙をプログラムで設定することはできません。今のところ、Jelly Bean は、ユーザーの操作なしでプログラムによってライブ壁紙を変更することをサポートしています。

于 2012-12-06T12:08:00.983 に答える
4

否定的な人には申し訳ありませんが、ユーザーの操作なしでプログラムでライブ壁紙を設定することは可能です。以下が必要です。

  1. アプリをシステム特権にする
  2. <uses-permission android:name="android.permission.SET_WALLPAPER_COMPONENT" />
  3. Java リフレクション(スーパー ハッキング コード)
  4. 目的のWallpaperService (ライブ壁紙)へのクラス参照

注:項目 3 では、独自のライブ壁紙 MyWallpaperService クラスを使用しました。

これは、アプリにシステム権限があり、マニフェストに次の権限がある場合にのみ実行できます。

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

これで、リフレクションを使用して、WallpaperManager の隠しメソッドを呼び出してライブ壁紙を手動で設定できます。

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

ソース コードを参照してください。

于 2015-09-17T18:08:35.497 に答える