您的位置:首页 > 电脑网络 > 笔记本 > 5.14 获取手机现存桌面

5.14 获取手机现存桌面

luyued 发布于 2011-04-20 15:43   浏览 N 次  

5.14 获取手机现存桌面
getWallpaper与setImageDrawable

范例说明

要如何通过程序取得现在手机所使用的桌面背景呢?最正确的方法就是通过重写ContextWrapper类里的getWallpaper()方法,而为了确定选取到的图片就是背景桌面,本范例在Activity里规划了一个ImageView Widget,当选取成功,便将桌面放在其中作为对照。

ImageView一开始使用手机系统默认的icon图片(Drawable),当用户单击取得桌面的按钮时,将会选取手机的桌面显示在ImageView,并且将按钮改为"恢复",再单击"恢复"时,将ImageView的图改回原来的ICON图片。

运行结果(见图5-15)

(点击查看大图)图5-15 选取手机桌面范例程序

src/irdc.ex05_14/EX05_14.java

ImageView是用setImageDrawable来设置图片传入的值为Drawable,而通过getWallpaper()方法取得的手机桌面图片,其返回值类型恰好也是Drawable数据类型,这意味着ImageView是存储手机背景桌面最好的"容器"。

诚如一开始所提到的,getWallpaper是属于ContextWrapper这个类,为Activity的父类,所以可以直接使用。


/* import程序略 */
public class EX05_14 extends Activity
{
private ImageView myImageView;
private Button myButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myImageView = (ImageView) findViewById(R.id.myImageView);
myButton = (Button) findViewById(R.id.myButton);
/* myButton添加OnClickListener */
myButton.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
/* 取得按钮的字符串 */
String text = ((Button) v).getText().toString();
/* 字符串为get时将myImageView设成桌面图片 */
if (text.equals(getString(R.string.strButton1)))
{
((Button) v).setText(R.string.strButton2);
myImageView.setImageDrawable(getWallpaper());
}
/* 字符串为reset时将myImageView设成原始图档 */
else if (text.equals(getString(R.string.strButton2)))
{
((Button) v).setText(R.string.strButton1);
myImageView.setImageDrawable(getResources().getDrawable(
R.drawable.icon));
}
}
});
}
}

扩展学习

本范例程序纯属练习,我们会到最后再来探究ContextWrapper。它除了提供getWallpaper()抓手机桌面,还有个功能类似的peekWallpaper(),两者的差别是getWallpaper()返回有效的Drawable。当手机没有设桌面时,会返回系统默认的桌面,peekWallpaper()当手机没有设桌面时则返回null,常用在设计替换手机桌面程序时使用,也可以将所取得的桌面背景图片通过Bitmap.createBitmap(),将手机的背景图片输出成Bitmap数据类型,可参考以下程序:


Drawable drawable;
Bitmap bmp = Bitmap.createBitmap(width, height, true);
Canvas canvas = new Canvas(bmp);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);

反之,欲将Bitmap转成BitmapDrawable:


Bitmap bmp = Bitmap.createBitmap(width, height, true);
BitmapDrawable drawable = new BitmapDrawable(bmp);
广告赞助商