通常情况下为一个应用添加快捷方式,只要在launcher中长按这个应用 的图标,系统就会为这个应用在桌面上创建一个快捷方式,名字与图标与launcher中应用的名字与图标相同。利用这种方法创建快捷方式 不需要对activity进行特殊的设置,是由系统自动完成的。
* 在android的早期版本中(我试了Api15的模拟器 该功能已经取消了)还可以通过在系统桌面长按,这时Android会显示用户可以选择添加 的桌面种类列表,选择Shortcut(快捷方式)后,Android会列出所有定义了android.intent.action.CREATE_SHORTCUT的所有应用. 我们就可以选择为列表中的某个activity添加快捷方式。利用这种方法添加快捷方式,需要处理activity,让它支持添加快捷方式。
* 这个demo演示的就是利用这种方式来为activity添加快捷方式。
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/hello_world" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="intent:" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/intent_info" />
</LinearLayout>
MainActivity
public class MainActivity extends Activity {
private static final String EXTRA_KEY = "com.fishtosky.launchershortcuts.MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在加载视图之前就进行判断,如果接收到的intent是创建快捷方式,那么就调用创建快捷方式的方法后,结束掉自己。
Intent intent = getIntent();
if (Intent.ACTION_CREATE_SHORTCUT.equals(intent.getAction())) {
setupShortcut();
finish();
return;
}
// 如果是正常的打开应用则创建视图,并将意图的信息和意图中传递的数据显示在文本框中。
// 在本例中如果使用launcher中正常的方式打开则extra为空,如果使用桌面的快捷方式打开则intent会传递字符串
// 显示在文本上,以区别两种不同方式打开应用。
setContentView(R.layout.activity_main);
TextView intentInfo = (TextView) findViewById(R.id.intent_info);
String info = intent.toString();
String extra = intent.getStringExtra(EXTRA_KEY);
if (extra != null) {
info = info + " " + extra;
}
intentInfo.setText(info);
}
//设置快捷方式
private void setupShortcut() {
//创建一个意图,用于指明当我们点击快捷方式时需要打开的activity,这里打开的是自己
Intent shortcutIntent=new Intent(Intent.ACTION_MAIN);
shortcutIntent.setClassName(this, this.getClass().getName());
shortcutIntent.putExtra(EXTRA_KEY, "这是通过快捷方式打开的应用!");
//再创建一个意图,指明创建快捷方式的意图,快捷方式的名字和图标
Intent intent=new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
Parcelable iconResource=Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
//设置返回的结果
setResult(RESULT_OK, intent);
}
}
配置文件:一是对activity进行配置。activity-alias在需要重复使用同一个activity时使用,直接理解就是activity的一个别名。比如在本例中我们可以在launcher中直接启动activity,也以可通过长按桌面为activity添加一个快捷方式,两种操作都调用了同一个activity,这个时候就需要用到activity-alias。
<activity-alias
android:name="ShortCut"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
二是要为创建快捷方式添加权限:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>