Android桌面组件开发之桌面快捷方式(一)

 Home是Android设备开启后第一个与用户交互的应用程序。在其他应用程序运行于前台时,Home也将一直运行于后台。

在屏幕分辨率为320*480像素的Android设备上,竖屏时这个桌面有3快320*400px的区域组成,而每块区域即每屏被划分成16个80*100像素的单元格;横屏时则是由3块424*296px的区域构成,每屏也是被划分成了16个单元格,但每个单元格的大小为106*74px。(Android2.2系统现在已经达到了五屏)。

具体尺寸请看图:

在Launcher的桌面可以添加三种类型的组件,分别是快捷方式、实时文件夹和桌面部件,其中桌面快捷方式和实时文件夹在桌面区域上均占一个单元格的大小,而桌面部件(widget)则根据功能的需要占用一个或多个单元格。

创建快捷方式的方法有两种:1、 在应用程序中构建一个Intent,然后以Broadcast的形式通知Launcher创建一个快捷方式;2、 为应用程序的组件注册一个符合特定条件的IntentFilter,然后就可以直接在Launcher的桌面添加启动该组件的快捷方式了。

看看添加快捷方式的代码(第一种):

MainActivity的代码:(布局代码略去)

Code:
  1. package com.myShortCut;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.net.Uri;  
  6. import android.os.Bundle;  
  7. import android.os.Parcelable;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.widget.Button;  
  11. /* 
  12.  * 桌面组件->快捷方式->在应用程序中添加快捷方式 
  13.  */  
  14. public class HelloShortCut extends Activity implements OnClickListener  
  15. {  
  16.     private Button bt_fire = null;  
  17.     private Button bt_police = null;  
  18.     private Intent directCall = null;  
  19.     private final String ACTION_ADD_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";  
  20.   
  21.   
  22.     /** Called when the activity is first created. */  
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState)  
  25.     {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.main);  
  28.   
  29.         bt_fire = (Button) findViewById(R.id.bt_fire);  
  30.         bt_police = (Button) findViewById(R.id.bt_police);  
  31.   
  32.         bt_fire.setOnClickListener(this);  
  33.         bt_police.setOnClickListener(this);  
  34.   
  35.         directCall = new Intent(Intent.ACTION_CALL);  
  36.     }  
  37.   
  38.   
  39.     @Override  
  40.     public void onClick(View v)  
  41.     {  
  42.         // TODO Auto-generated method stub  
  43.         Intent addShortCut = new Intent(ACTION_ADD_SHORTCUT);  
  44.         String nameToDial = null;  
  45.         Parcelable icon = null;  
  46.   
  47.         switch (v.getId())  
  48.         {  
  49.             case R.id.bt_fire:  
  50.                 nameToDial = "119";  
  51.                 icon = Intent.ShortcutIconResource.fromContext(this,  
  52.                     R.drawable.fire);  
  53.                 break;  
  54.             case R.id.bt_police:  
  55.                 nameToDial = "110";  
  56.                 /* 
  57.                  * ShortcutIconResource是Intent的 
  58.                  * 一个内部类,专门用来构造快捷方式的图标,而Intent又实现了Parcelable接口,所以Intent对象和 
  59.                  * ShortcutIconResource对象都可以用putExtra(String, Parcelable)这一重载方法将信息填入到 
  60.                  * 广播Intent的附加信息中去。 
  61.                  */  
  62.                 icon = Intent.ShortcutIconResource.fromContext(this,  
  63.                     R.drawable.police);  
  64.                 break;  
  65.             default:  
  66.                 break;  
  67.         }  
  68.   
  69.         addShortCut.putExtra(Intent.EXTRA_SHORTCUT_NAME, nameToDial);  
  70.         addShortCut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);  
  71.         directCall.setData(Uri.parse("tel:" + nameToDial));  
  72.         addShortCut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, directCall);  
  73.   
  74.         this.sendBroadcast(addShortCut);  
  75.     }  
  76. }  

运行结果:

1、 

2、 (Toast是系统提供的)

3、(成功添加之后)

4、 (删除快捷图标请长按图标,然后拖到下方“抽屉”区域,那个“抽屉”就会变为垃圾箱的图标)

参考书籍:《深入浅出GoogleAndroid》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值