在上一篇 [Android] 如何在桌面建立捷徑圖示 (1.Launcher 的 BroadcastReceiver)文章介紹透過Launcher的權限在桌面建立捷徑 , 但其實我們還可以在桌面的
空白處長按不放 , 系統即會詢問我們是否要在桌面加入物件 , 如下圖
在這邊可以選擇要加入的物件類別 , 如果說我們想要替我們的程式產生捷徑
使用系統內建的功能 , 這邊許多城市都可以產生出捷徑 , 而我們的程式會被系統放在
應用程式下點選之後桌面就會出現程式捷徑了 , 可是這樣產生的捷徑固定動作就是前
往該應用程式 , 如果我們想透過長按的方式呼叫出清單並自訂我們捷徑的動作的話
該如何實作呢?
首先我們需要在 AndroidManifest.xml 添加屬性 , 這邊多加了一行
<action android:name="android.intent.action.CREATE_SHORTCUT"/>
現在可以看到ShortcutTest 出現在清單上了
接下來就是程式碼的部分
import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class ShortcutTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 如果intent的動作是被要求建立一個捷徑 , 那麼進入判斷式子建立捷徑 , 然後終止Activity if (Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction())) { setupShortcut(); finish(); return; } setContentView(R.layout.main); TextView Info = (TextView) findViewById(R.id.TextView); Info.setText("請回到桌面 , 在空白處長按 , 選取建立捷徑"); } private void setupShortcut() { Intent shortcutIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT); //也可以使用 Intent.ACTION_MAIN shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Shortcut"); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(this,R.drawable.icon)); Intent intent = new Intent(); intent.setClassName(this, this.getClass().getName()); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); setResult(RESULT_OK, shortcutIntent); /* * setResult (int resultCode, Intent data) * Call this to set the result that your activity will return to its caller. Parameters resultCode: The result code to propagate back to the originating activity, often RESULT_CANCELED or RESULT_OK data: The data to propagate back to the originating activity. See Also RESULT_CANCELED RESULT_OK RESULT_FIRST_USER setResult(int) * */ } }
當我們執行這個程式的時候會出現這樣的畫面
(*)由於我們的程式碼裡面有一個是否為 Intent.ACTION_CREATE_SHORTCUT
動作的判斷式所以直接從應用程式中執行的話只會出現上面的提示
沒有任何產生捷徑的動作 , 所以必須從剛剛的清單選取
ShortcutTest此時系統會宣告一個android.intent.action.CREATE_SHORTCUT
的Intent並呼叫
startActivityForResult(Intent intent, int requestCode)
來等候ShortcutTest 的回應這
個時候
ShortcutTest 接獲Intent.ACTION_CREATE_SHORTCUT
的Intent
就會呼叫判斷式中的setupShortcut() , 最後再以SetResult(int)回傳資訊給系統
告知要建立捷徑
看
在清單中要加入捷徑時 , 在應用程式底下的apps , 會直接的產生捷徑 , 而和應用程
式同
一層Level的物件, 該Level 中
共同點都是會先執行該程式
, 但並不是每個都可以
成功產生捷徑
ex. 書籤,直接傳訊,直接撥號
Google 定位倒是可以。
所以
ShortcutTest
出現在該Level 也就會
被執行一次 , 所以接到
Intent.ACTION_CREATE_SHORTCUT後 , 再完成捷徑的回傳程式就自我 finish() , 好讓
畫面跳回桌面 , 這邊都是自己的實驗和推測 , 有錯誤的話歡迎討論。
沒有留言:
張貼留言