今天遇到一个需求,就是向桌面添加一个快捷方式,使点击时链接到特定的网页。网上找了一下,看到这篇文章
受其启发,实现了该功能。
public void
addShortcut(Parcelable icon, String name, Uri uri){
Intent intentAddShortcut = new
Intent(ACTION_ADD_SHORTCUT);
//添加名称
intentAddShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
name);
//添加图标
intentAddShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
icon);
//设置Launcher的Uri数据
Intent intentLauncher = new Intent();
intentLauncher.setData(uri);
//添加快捷方式的启动方法
intentAddShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
intentLauncher);
sendBroadcast(intentAddShortcut);
}
当然,你还需要添加一个permission
"com.android.launcher.permission.INSTALL_SHORTCUT"
/>
这里第一个参数Parcelable类型的icon如何获得呢,以下举个例子从Drawable文件夹中获取图片。
Parcelable icon =
Intent.ShortcutIconResource.fromContext(this,
R.drawable.icon);
转:http://blog.csdn.net/llfjfz/article/details/5752017
如何实现添加快捷图标?
Launcher为了让其他应用程序能够定制自己的快捷图标,就注册了一个BroadcastReceiver专门接收其他应用程序发来的快捷图标
定制信息。所以只需要根据该BroadcastReceiver构造出相对应的Intent并装入我们的定制信息,最后调用sendBroadcast方
法就可以创建一个快捷图标了。那么,要构造怎样一个Intent才会被Launcher的BroadcastReceiver接收呢?我们还是先来看看这
个BroadcastReceiver的注册信息吧。
下面是Launcher的AndroidManifest.xml文件中Install-ShortcutReceiver的注册信息。
android:name=”.InstallShortcutReceiver”
android:permission=
“com.android.launcher.permission.INSTALL_SHORTCUT”>
<intent-filter>
intent-filter>
如何向这个 BroadcastReceiver 发送广播,设置如下:
首先应用程序必须要有com.android.launcher.permission.INSTALL_SHORTCUT权限;
然后广播出去的Intent的action设置com.android.launcher.action.INSTALL_SHORTCUT;
这样广播就可以发送给Launcher的InstallShortcutReceiver了;
而快捷图标的信息则是以附加信息的形式存储在广播出去的Intent对象中的,包括有图标、显示的名称以及用来启动目标组件的Intent这三种信息。我们可以通过putExtra的重载方法,通过指定相应的键值,将这些信息放到附加信息的Bundle对象中。
列出了各种快捷图标信息相对应的键值和数据类型:
下面举些具体的例子,如下:
private final String ACTION_ADD_SHORTCUT =
“com.android.launcher.action.INSTALL_SHORTCUT”;
Intent addShortcut =new Intent(ACTION_ADD_SHORTCUT);
String numToDial = null;
Parcelable icon = null;
numToDial = “110″;
icon =
Intent.ShortcutIconResource.fromContext(this,R.drawable.jing);
//numToDial = “119″;
//icon =
Intent.ShortcutIconResource.fromContext(this,R.drawable.huo);
//图标
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,icon);
//名称
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,numToDial);
//启动目标组件的Intent
Intent directCall;
directCall.setData(Uri.parse(“tel://”+numToDial));
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,directCall);
sendBroadcast(addShortcut);
上面的程序运行后的界面如下:
总结说明
只要知道这些信息后,你就可以轻而易举的为应用程序添加快捷图标。
在Launcher 添加应用程序的快捷图标
当我们在Home应用程序Launcher的桌面空白处长按触摸时,会出现一个对话框,提示选择要添加的桌面组件,如下图所示:
这里出现了快捷图标的选项。选择添加快捷图标后,会弹出一个对话框,显示出了可添加快捷图标的Activity所属的应用程序的图标和名称的列表。当我们想把添加快捷图标的Activity添加到这一列表时,只需要在这个Activity注册时添加一个Action为android.intent.action.
CREATE_SHORTCUT的IntentFilter就可以,如下面所示:
这样,在这个Activity列表里,就有了你的应用程序的图标和名称。有时候,我们可以在应用程序中定义一个直接在桌面创建快捷图标的Activity,可以简化用户操作,例子如下:
在类FireShortcut中,重新实现onCreate方法。首先在以上代码的第 16
行对启动此Activity的Action进行判断,若是“添加快捷图标”的Action就初始化快捷图标的Intent——设置名称、图标及Intent。由于“添加快捷图标”Action是由Launcher通startActivityForResult这一方法发出的,所以为了能够在当前Activity退出后把初始化的快捷图标Intent返回给Launcher应用程序,就在第35行调
用了setResult这一方法,设置结果值为RESULT_OK表示正常返回,而快捷图标的Intent则作为结果Intent返回给
Launcher,然后调用finish()方法结束Activity。若Action直接不匹配,设置结果值为RESULT_CANCELED表示取
消,然后退出。
定义完了类FireShortcut以后,不要忘了还要在AndroidManifest.xml中对其进行注册声明。另外为了使该Activity能够被添加到桌面的快捷图标的列表中,还要添加相应的IntentFilter。
现在,在桌面的添加快捷图标的Activity的列表中,就出现了FireShortcut选项,单击此图标,就会直接在桌面上添加一个“拨打火警119”的快捷图标了。