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》

你可能感兴趣的:(Android桌面组件开发之桌面快捷方式(一))