安卓创建快捷方式相关问题 Intent Intent-filter
生活随笔
收集整理的這篇文章主要介紹了
安卓创建快捷方式相关问题 Intent Intent-filter
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Intent
在安卓中,Activity啟動時通常需要Intent參數。Intent參數中包含以下幾個常用的屬性:
Component,指定了要啟動的Activity,以及啟動的context,使用Intent.setClass或Intent.setComponent方法可以設置;
Action屬性,可用Intent.setAction方法設置; Category屬性,可用Intent.addCategory方法添加,Action和Category屬性一般用于做過濾;
Extra屬性,用于傳入一些參數,可通過Intent.putExtra方法添加。在Activity被啟動后可以通過getIntent.getExtra獲取Extra參數。
Manifest
安卓Activity有一個intent-filter屬性,用于過濾啟動啟動此Activity所使用的Intent,不滿足條件的Intent無法啟動這個Activity,也就是Intent的Action和Category屬性了。
最常見的用法,就是主啟動Activity一般這么寫: ? ? ? ??<activity ????????????android:name=".MainActivity" ????????????android:label="@string/title_activity_main"?> ????????????<intent-filter> ????????????????<action?android:name="android.intent.action.MAIN"?/> ????????????????<category?android:name="android.intent.category.LAUNCHER"?/> ????????????</intent-filter> ????????</activity>??
給Activity設置intent-filter.action屬性,則該Activity可以作為應用程序入口,被其他程序調用(比如Launcher啟動器)。可以有多個action,只要Intent具有其中的一個action就可以啟動Activity。如: <action?android:name="voice"?/>
<action?android:name="android.intent.action.MAIN"?/>
在Activity的intent-filter.category屬性中添加LAUNCHER值,則此Activity可以出現在Launcher中,也就是手機應用程序主菜單中。 <category?android:name="android.intent.category.LAUNCHER"?/>
如果設置了action但沒有對category屬性添加LAUNCHER,會出現下述警告,表明Activity暴漏在外面,可被外部的非Launcher程序調用,可能會有安全性問題。 Exported activity does not require permission
此時設置android:exported="false"則警告會消失。這是,這個Activity只能在本應用內部被調用。因此,指向具有這一屬性的Activity的快捷方式被點擊時,Launcher無法調用Activity,于是會顯示應用程序不存在。 android:exported="false"??
同一個App可以有多個Activity具有action.MAIN屬性,Launcher會自動選擇一個作為程序入口。
? ? ? ??<!--?歡迎界面?--> ????????<activity ????????????android:name=".ui.ActivityWelcome" ????????????android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"?> ????????????<intent-filter> ????????????????<action?android:name="android.intent.action.MAIN"?/> ????????????????<category?android:name="android.intent.category.LAUNCHER"?/> ????????????</intent-filter> ????????</activity> ????????<!--?主界面?--> ????????<activity?android:name=".ui.ActivityMain"?> ????????????<intent-filter> ????????????????<action?android:name="MAIN"?/> ????????????????<category?android:name="android.intent.category.LAUNCHER"?/> ????????????</intent-filter> ????????</activity>
代碼添加快捷方式的方法
? ??/** ?????*?創建快捷方式 ?????*?<p> ?????*?需要權限 ?????*?<p> ?????*?<uses-permission ?????*?android:name="com.android.launcher.permission.INSTALL_SHORTCUT"?/> ?????*?<p> ?????*? ?????*?@param?context ?????*????????????Context ?????*?@param?intent ?????*????????????要啟動的Intent ?????*?@param?name ?????*????????????快捷方式名 ?????*?@param?icon ?????*????????????快捷方式圖標 ?????*/ ????public?static?final?void?addShortcut(Context?context,?Intent?intent, ????????????String?name,?int?icon)?{ ????????ShortcutIconResource?iconRes?=?Intent.ShortcutIconResource.fromContext( ????????????????context,?icon); ????????Intent?sc?=?new?Intent("com.android.launcher.action.INSTALL_SHORTCUT"); ????????sc.putExtra(Intent.EXTRA_SHORTCUT_NAME,?name);?//?快捷方式名 ????????sc.putExtra("duplicate",?false);?//?不允許重復創建 ????????sc.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,?iconRes);?//?快捷方式圖標 ????????sc.putExtra(Intent.EXTRA_SHORTCUT_INTENT,?intent);?//?啟動Intent ????????context.sendBroadcast(sc); ????}??
? ??public?static?final?void?addShortcut(Context?context,?Intent?intent, ????????????int?name,?int?icon)?{ ????????addShortcut(context,?intent,?context.getString(name),?icon); ????}? ?
通過給Intent設置不同的Component、Action等,即可從Launcher啟動相應Activity,并可傳入Extra參數,這樣可以實現一些諸如一鍵截屏,快捷啟動之類的功能。
? ? Intent?intent?=?new?Intent(Intent.ACTION_MAIN); ????intent.setClass(this,?ActivityWelcome.class); ? ? addShortcut(this,?intent,?R.string.app_name,?R.drawable.ic_launcher);
? ??Intent?intent1?=?new?Intent("MAIN"); ????intent1.setClass(this,?this.getClass()); ? ??addShortcut(this,?intent1,?R.string.app_name,?R.drawable.ic_launcher);
本文由PurpleSword(jzj1993)原創,轉載請注明 原文網址 http://blog.csdn.net/jzj1993
總結
以上是生活随笔為你收集整理的安卓创建快捷方式相关问题 Intent Intent-filter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝健康码升级为“医疗健康”,整合一站
- 下一篇: 测试从Mathon插件发表