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);
- 06-02· 【转】 给Ubuntu安装netboo
- 06-02· Netbook
- 05-31· 你搜“联宝戏” 揭示你未
- 05-31· 联宝戏一切成功都是那么
- 05-31· 联宝(LINPO)
- 05-31· 台湾联宝CY25 ¥1400
- 05-31· 透视!笔记本奸商的无间道
- 05-31· 沈阳惠普笔记本维修千万
- 05-31· 重庆联宝活性炭恭祝各位
- 05-31· [转载]第十步:移联宝移动
- 05-28· 高端便携商务本 富士通
- 05-27· 富士通推首台器MeeGo新本
- 05-27· 富士通云计算方案三级跳
- 05-26· 惠普 Compaq 6530B(VA078PA)
- 05-26· of Alienware M14xAkku HP Compaq
- 05-26· ASUS HP COMPAQ DELL 笔记...
- 05-26· 惠普Compaq Presario CQ40 313A
- 05-25· 2011年03月25日
- 05-25· 如何安装在您的康柏Evo
- 05-25· 康柏斯校园购物网康柏斯