通常情況下為一個應用添加快捷方式,隻要在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>
二是要為建立快捷方式添權重限: