安卓创建快捷方式相关问题 Intent Intent-filter
生活随笔
收集整理的這篇文章主要介紹了
安卓创建快捷方式相关问题 Intent Intent-filter
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Intent
在安卓中,Activity啟動(dòng)時(shí)通常需要Intent參數(shù)。Intent參數(shù)中包含以下幾個(gè)常用的屬性:
Component,指定了要啟動(dòng)的Activity,以及啟動(dòng)的context,使用Intent.setClass或Intent.setComponent方法可以設(shè)置;
Action屬性,可用Intent.setAction方法設(shè)置; Category屬性,可用Intent.addCategory方法添加,Action和Category屬性一般用于做過濾;
Extra屬性,用于傳入一些參數(shù),可通過Intent.putExtra方法添加。在Activity被啟動(dòng)后可以通過getIntent.getExtra獲取Extra參數(shù)。
Manifest
安卓Activity有一個(gè)intent-filter屬性,用于過濾啟動(dòng)啟動(dòng)此Activity所使用的Intent,不滿足條件的Intent無法啟動(dòng)這個(gè)Activity,也就是Intent的Action和Category屬性了。
最常見的用法,就是主啟動(dòng)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設(shè)置intent-filter.action屬性,則該Activity可以作為應(yīng)用程序入口,被其他程序調(diào)用(比如Launcher啟動(dòng)器)。可以有多個(gè)action,只要Intent具有其中的一個(gè)action就可以啟動(dòng)Activity。如: <action?android:name="voice"?/>
<action?android:name="android.intent.action.MAIN"?/>
在Activity的intent-filter.category屬性中添加LAUNCHER值,則此Activity可以出現(xiàn)在Launcher中,也就是手機(jī)應(yīng)用程序主菜單中。 <category?android:name="android.intent.category.LAUNCHER"?/>
如果設(shè)置了action但沒有對category屬性添加LAUNCHER,會(huì)出現(xiàn)下述警告,表明Activity暴漏在外面,可被外部的非Launcher程序調(diào)用,可能會(huì)有安全性問題。 Exported activity does not require permission
此時(shí)設(shè)置android:exported="false"則警告會(huì)消失。這是,這個(gè)Activity只能在本應(yīng)用內(nèi)部被調(diào)用。因此,指向具有這一屬性的Activity的快捷方式被點(diǎn)擊時(shí),Launcher無法調(diào)用Activity,于是會(huì)顯示應(yīng)用程序不存在。 android:exported="false"??
同一個(gè)App可以有多個(gè)Activity具有action.MAIN屬性,Launcher會(huì)自動(dòng)選擇一個(gè)作為程序入口。
? ? ? ??<!--?歡迎界面?--> ????????<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>
代碼添加快捷方式的方法
? ??/** ?????*?創(chuàng)建快捷方式 ?????*?<p> ?????*?需要權(quán)限 ?????*?<p> ?????*?<uses-permission ?????*?android:name="com.android.launcher.permission.INSTALL_SHORTCUT"?/> ?????*?<p> ?????*? ?????*?@param?context ?????*????????????Context ?????*?@param?intent ?????*????????????要啟動(dòng)的Intent ?????*?@param?name ?????*????????????快捷方式名 ?????*?@param?icon ?????*????????????快捷方式圖標(biāo) ?????*/ ????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);?//?不允許重復(fù)創(chuàng)建 ????????sc.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,?iconRes);?//?快捷方式圖標(biāo) ????????sc.putExtra(Intent.EXTRA_SHORTCUT_INTENT,?intent);?//?啟動(dòng)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設(shè)置不同的Component、Action等,即可從Launcher啟動(dòng)相應(yīng)Activity,并可傳入Extra參數(shù),這樣可以實(shí)現(xiàn)一些諸如一鍵截屏,快捷啟動(dòng)之類的功能。
? ? 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)原創(chuàng),轉(zhuǎn)載請注明 原文網(wǎng)址 http://blog.csdn.net/jzj1993
總結(jié)
以上是生活随笔為你收集整理的安卓创建快捷方式相关问题 Intent Intent-filter的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝健康码升级为“医疗健康”,整合一站
- 下一篇: 安卓动画知识总结 Animation A