Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android 為你的應用程序添加快捷方式【優先級高的快捷方式】

Android 為你的應用程序添加快捷方式【優先級高的快捷方式】

編輯:Android開發實例

有人會說,快捷方式,不是安裝完應用程序後,長按應用程序的ICON然後將它拖到桌面上不就行了嗎?沒錯,這樣是一種方法,但這種方法有一個缺點,看圖吧:

如上圖,如果我們長按桌面點擊快捷方式,將會跳到如下界面,如果單從這個界面選擇的話,我們就必須進入Applications 目錄,然後再在Applications 裡面選擇我們對應的應用程序,這樣的話用戶可能得麻煩的去找咯。但我們同時會發現,在Applications 的下面有很多另外的ICON比如 上圖的BookMark ,Contact 等,這些也是應用,那麼這些是怎麼做到不用進去Applications 而在第一頁就出現供用戶選擇呢?今天我們就針對這點來講講吧。

 

要做這一功能首先我們先來了解一下manifest 裡面的這一標簽:

<activity-alias>

 

syntax:語法:
<activity-alias android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:targetActivity="string" >
. . .
</activity-alias>
contained in:隸屬於:
<application>
can contain:可以包含:
<intent-filter>
<meta-data>
description:說明:
An alias for an activity, named by the targetActivity attribute. The target must be in the same application as the alias and it must be declared before the alias in the manifest.
activity的一個別名,用targetActivity屬性命名。目標activity必須與別名在同一應用程序的manifest裡,並且在別名之前聲明。

The alias presents the target activity as a independent entity. It can have its own set of intent filters, and they, rather than the intent filters on the target activity itself, determine which intents can activate the target through the alias and how the system treats the alias. For example, the intent filters on the alias may specify the "android.intent.action.MAIN" and "android.intent.category.LAUNCHER" flags, causing it to be represented in the application launcher, even though none of the filters on the target activity itself set these flags.
別名作為一個獨立的實體代表目標activity。它可以有它自己的一套intent filter,它們,而不是目標activity自己的intent filter,決定哪個intent能夠活性化目標通過別名以及系統如何處理別名。例如,別名的intent filter可以指定"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"標簽,使之顯示在應用程序啟動器上,即使目標activity自己沒有設置這些標簽。
 

With the exception of targetActivity, <activity-alias> attributes are a subset of <activity> attributes. For attributes in the subset, none of the values set for the target carry over to the alias. However, for attributes not in the subset, the values set for the target activity also apply to the alias.
targetActivity的例外,<activity-alias>屬性是<activity>屬性的一個子集。對於該子集中的屬性,目標activity中設置的值不會覆蓋別名的值。然而,對於那些子集中沒有設置的屬性,設置給目標activity的值同樣適用於別名。
 

 

上面給出的解釋我們來配置一下manifest,配置為如下:

 

<activity android:name=".shortcut">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

        <activity-alias android:name=".CreateShortcuts"
            android:targetActivity=".shortcut" android:label="@string/shortcut">

            <intent-filter>
                <action android:name="android.intent.action.CREATE_SHORTCUT" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </activity-alias>

 

 

Activity:

.shortcut 是我們快捷方式需要的Activity

activity-alias:

 對應的targetActivity是指向應用創建快捷方式使用的Activity

android:label對應的創建快捷方式列表顯示的文字,而該應用對應的快捷方式的圖標則默認使用我們給定的application的圖標。如圖:

好了,這是第一步步驟,下面進入代碼階段,先看代碼:

 

package com.terry.attrs;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.widget.LinearLayout;
import android.widget.TextView;

public class shortcut extends Activity {
    private static final String SHORT_CUT_EXTRAS = "com.terry.extra.short";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        final Intent intent = getIntent();
        final String action = intent.getAction();
        if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
            createShortCut();
            finish();
            return;
        }

        String extra = intent.getStringExtra(SHORT_CUT_EXTRAS);
        LinearLayout layout = new LinearLayout(getApplicationContext());
        TextView tv = new TextView(getApplicationContext());

        if (extra != null)
            tv.setText(extra);
        layout.addView(tv);
        setContentView(layout);
    }

    void createShortCut() {
        Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
        shortcutIntent.setClass(this, this.getClass());
        shortcutIntent.putExtra(SHORT_CUT_EXTRAS, "測試的快捷方式");

        Intent intent = new Intent();
        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "這裡隨便指定");
        Parcelable shortIcon = Intent.ShortcutIconResource.fromContext(
                this, com.terry.attrs.R.drawable.icon);
        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, shortIcon);
        setResult(RESULT_OK, intent);
    }
}

 

 

代碼解釋:

onCreate方法,首先獲取intent 的action如果接收到的action為創建快捷方式的請求,則執行創建快捷方式的代碼,否則則通過得到的extra 為textView 賦值。

createShortCut方法,首先設置快捷方式點擊後要跳轉的intent 和要帶入的參數,然後設置桌面快捷方式的名稱,圖標和對應的intent(即上面帶入數據和跳轉的界面的 class的Intent)最後將結果傳入。

最近運行的結果:

跳擊後到達的界面:

 

TIP:這裡可以是任何ACTIVITY界面。

最後給大家分享下源碼吧:

快捷方式

就到這裡,希望我的一篇廢話能對你有所幫助。

轉自:http://www.cnblogs.com/TerryBlog/archive/2010/11/04/1869436.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved