WallpaperManager 壁纸管理器
WallpaperManager (壁纸管理器) 是 Android 提供的用于管理壁纸的一个 API
WallpaperManager 方法
设置壁纸的相关方法
方法 | 说明 |
---|---|
setBitmap(Bitmap bitmap) | 将壁纸设置为 bitmap 所代表的位图 |
setResource(int resid) | 将壁纸设置为 resid 资源所代表的图片 |
setStream(InputStream data) | 将壁纸设置为 data 数据所代表的图片 |
其它方法
方法 | 说明 |
---|---|
clear() | 清除壁纸,设置回系统默认的壁纸 |
getDesiredMinimumHeight() | 最小壁纸高度 |
getDesiredMinimumWidth() | 最小壁纸宽度 |
getDrawable() | 获得当前系统壁纸,如果没有设置壁纸,则返回系统默认壁纸 |
getWallpaperInfo() | 假如当前壁纸是动态壁纸,返回动态壁纸信息 |
peekDrawable() | 获得当前系统壁纸,如果没设置壁纸的话返回 null |
获得 WallpaperManager 对象
WallpaperManager wpManager =WallpaperManager.getInstance(this);
设置壁纸需要的权限
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
调用系统自带的壁纸选择功能
调用系统自带的壁纸选择功能很简单,就两行代码搞定
Intent it = new Intent(Intent.ACTION_SET_WALLPAPER); startActivity(Intent.createChooser(it, "选择壁纸"));
-
创建一个 空的 Android 项目
cn.twle.android.SelectWallPaper
-
修改 activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/btn_set" android:layout_marginTop="100dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="修改壁纸"/> </LinearLayout>
-
修改 MainActivity.java
package cn.twle.android.selectwallpaper; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn_set = (Button) findViewById(R.id.btn_set); btn_set.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent it = new Intent(Intent.ACTION_SET_WALLPAPER); startActivity(Intent.createChooser(it, "选择壁纸")); } }); } }
将 Activity 的背景设置为壁纸
将 Activity 的背景设置为壁纸的方法有两种
-
在 Activity 中用代码进行设置
修改 onCreate() 方法
@Override protected void onCreate(Bundle savedInstanceState) { setTheme(android.R.style.Theme_Wallpaper_NoTitleBar_Fullscreen); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
-
在 AndroidManifest.xml 中修改 Activity 的主题
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Wallpaper.NoTitleBar"/>
范例
-
复用上面的范例
-
修改
MainActivity.java
package cn.twle.android.selectwallpaper; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { setTheme(android.R.style.Theme_Wallpaper_NoTitleBar_Fullscreen); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
定时换壁纸
可以使用 AlarmManager(闹钟服务) 开发一个定时换壁纸
-
创建一个 空的 Android 项目
cn.twle.android.DynamicWallPaper
-
下载解压 /static/i/android/wallpaper_demo.zip 并把所有的图片拖到
res/drawable
目录 -
创建一个 Service MsWallPaperService.java 用于定时换壁纸
package cn.twle.android.dynamicwallpaper; import android.app.Service; import android.app.WallpaperManager; import android.content.Intent; import android.os.IBinder; public class MsWallPaperService extends Service { // 当前壁纸下标 private int current = 0; private int[] papers = new int[]{ R.drawable.w_1, R.drawable.w_2, R.drawable.w_3}; // 定义 WallpaperManager 服务 private WallpaperManager wm = null; @Override public void onCreate() { super.onCreate(); wm = WallpaperManager.getInstance(this); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if(current >= 4) current = 0; try{ wm.setResource(papers[current++]); }catch(Exception e){e.printStackTrace();} return START_STICKY; } @Override public IBinder onBind(Intent intent) { return null; } }
-
修改 AndroidManifest.xml,添加设置壁纸的权限
<uses-permission android:name="android.permission.SET_WALLPAPER" />
对 Service 进行注册
<service android:name=".MsWallPaperService"/>
-
修改 activity_main.xml 添加三个 Button
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn_on" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开启自动换壁纸" /> <Button android:id="@+id/btn_off" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="关闭自动换壁纸" /> <Button android:id="@+id/btn_clean" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="清除壁纸" /> </LinearLayout>
-
修改 MainActivity.java 实例化 aManager 并设置定时事件
package cn.twle.android.dynamicwallpaper; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.WallpaperManager; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.io.IOException; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_on; private Button btn_off; private Button btn_clean; private AlarmManager am; private PendingIntent pi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获得 AlarmManager 对象 am = (AlarmManager) getSystemService(ALARM_SERVICE); // 指定要启动的 Service,并指明动作是 Servce Intent intent = new Intent(MainActivity.this, MsWallPaperService.class); pi = PendingIntent.getService(MainActivity.this, 0, intent, 0); bindViews(); } private void bindViews() { btn_on = (Button) findViewById(R.id.btn_on); btn_off = (Button) findViewById(R.id.btn_off); btn_clean = (Button) findViewById(R.id.btn_clean); btn_on.setOnClickListener(this); btn_off.setOnClickListener(this); btn_clean.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_on: am.setRepeating(AlarmManager.RTC_WAKEUP, 0, 2000, pi); btn_on.setEnabled(false); btn_off.setEnabled(true); Toast.makeText(MainActivity.this, "自动更换壁纸设置成功", Toast.LENGTH_SHORT).show(); break; case R.id.btn_off: btn_on.setEnabled(true); btn_off.setEnabled(false); am.cancel(pi); break; case R.id.btn_clean: try { WallpaperManager.getInstance(getApplicationContext()).clear(); Toast.makeText(MainActivity.this, "清除壁纸成功~", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } break; } } }