activity-alias

2021.10.28

问题澄清:Plugtest 联调支撑;蓝牙手咪适配问题配合定位;河北联创项目联调支撑,挑战认证token认证接口优化、验证;MCX R2需求分析;mcvideo赋能文档书写;支持SDS服务器版本返回空时默认为4.0版本,OTA参数增加;

应用动态显示在桌面Launcher

启用禁用组件基础

package manager pm = getPackageManager();

pm . setcomponentinabledsetting(component name,

PackageManager。组件已启用状态已禁用,包管理器。DONT _ KILL _ APP);//禁用componentName组件,如果有category.LAUNCHER就不会显示在启动器上。

pm . setcomponentinabledsetting(component name,PackageManager。组件已启用状态已启用,包管理器。DONT _ KILL _ APP);//启用componentName组件。

应用程序动态出现在启动器上。

如果应用程序出现在启动器上,则该组件被启用,如果没有出现,则该组件被禁用。我们只需要在适当的时候启用和禁用它。一般是通过广播来实现的。例如,如果有SIM卡,应用程序会出现,但如果没有SIM卡,则不会出现。

公共类BootCompletedReceiver扩展BroadcastReceiver {

@覆盖

公共void onReceive(上下文语境,意图意图){

string action = intent . get action();

if (action == null) {

返回;

}

if (action.equals(Intent。ACTION_BOOT_COMPLETED)) {

//卡上电时先禁用组件。

disableComp(您的计算机名);

} else if(action . equals(TelephonyIntents。ACTION_SIM_STATE_CHANGED)) {

string sim status = intent . getstring xtra(IccCardConstants。INTENT _ KEY _ ICC _ STATE);

如果(!(IccCardConstants。INTENT_VALUE_ICC_ABSENT)。equals(SIMStatus)){

//如果其他状态的卡表示有卡,则该组件将被启用。

enableComp(您的计算机名);

}否则{

//如果卡片处于缺席状态,则取消图标显示,即引用Launcher类别的组件。

disableComp(您的计算机名);

}

}

}

//启用组件

公共静态void enable comp(component name compName){

package manager pm = getPackageManager();

pm . setcomponentinabledsetting(compName,

PackageManager。组件已启用状态已启用,包管理器。DONT _ KILL _ APP);

}

//禁用组件

公共静态void disable comp(component name compName){

package manager pm = getPackageManager();

pm . setcomponentinabledsetting(compName,

PackageManager。组件已启用状态已禁用,包管理器。DONT _ KILL _ APP);

}

}

AndroidManifest.xml

& lt接收者Android:name = & # 34;com . nan . breeze . bootcompletedreceiver & # 34;& gt

& lt意向过滤器& gt

& ltaction Android:name = & # 34;Android . intent . action . boot _ COMPLETED & # 34;/& gt;

& ltaction Android:name = & # 34;Android . intent . action . sim _ STATE _ CHANGED & # 34;/& gt;

& lt/intent-filter & gt;

& lt/receiver & gt;

应用动态替换图标

由于可以动态禁用启用组件,因此可以使用

活动别名的基本用法

& ltactivity-alias Android:enabled =[& # 34;真& # 34;| "假& # 34;]

安卓:导出=[& # 34;真& # 34;| "假& # 34;]

Android:icon = & # 34;可提取资源& # 34;

Android:label = & # 34;字符串资源& # 34;

Android:name = & # 34;字符串& # 34;

安卓:权限= & # 34;字符串& # 34;

Android:target activity = & # 34;字符串& # 34;& gt

& lt/activity-alias & gt;

属性解释

属性含义

启用是否生效。配置多个activity-alias时,如果您只想让一个activity-alias生效,请将其中一个设置为true。

当配置了intent-filter时,导出的内容是否可以被其他应用程序调用默认为真,当没有配置intent-filter时,默认为假,只能由应用程序自己调用。

图标定制生效时的图标

Label作为活动标签中的标签属性,主要表现为桌面上app的名称和活动标题的名称。

命名此活动的名称-别名。

Permission表示通过别名声明调用目标活动所需的权限。

TargetActivity表示目标活动,类似于Activity标签中的name属性,需要指定包类路径。指示通过activity-alias调用的活动。

例子

AndroidManifest.xml

& lt应用

Android:allow backup = & # 34;真& # 34;

Android:icon = & # 34;@ MIP map/IC _ launcher & # 34;

Android:label = & # 34;安卓图标& # 34;

Android:supports RTL = & # 34;真& # 34;

Android:theme = & # 34;@ style/app theme & # 34;& gt

& lt活动Android:name = & # 34;。主要活动& # 34;& gt

& lt意向过滤器& gt

& ltaction Android:name = & # 34;Android . intent . action . main & # 34;/& gt;

& lt类别Android:name = & # 34;Android . intent . category . launcher & # 34;/& gt;

& lt/intent-filter & gt;

& lt/activity & gt;

& lt活动别名

Android:name = & # 34;。MainAliasActivity & # 34

Android:target activity = & # 34;。主要活动& # 34;

Android:icon = & # 34;@ MIP map/IC _ launcher _ change & # 34;

Android:enabled = & # 34;假& # 34;& gt

& lt意向过滤器& gt

& ltaction Android:name = & # 34;Android . intent . action . main & # 34;/& gt;

& lt类别Android:name = & # 34;Android . intent . category . launcher & # 34;/& gt;

& lt/intent-filter & gt;

& lt/activity-alias & gt;

& lt/application & gt;

activity_main.xml

& lt?xml版本= & # 34;1.0"编码= & # 34;utf-8 & # 34;?& gt

& ltlinear layout xmlns:Android = & # 34;http://schemas.android.com/apk/res/android"

Android:layout _ width = & # 34;match _ parent & # 34

Android:orientation = & # 34;垂直& # 34;

Android:layout _ height = & # 34;match _ parent & # 34& gt

& lt纽扣

Android:layout _ margin = & # 34;10dp & # 34

Android:id = & # 34;@+id/BTN _ change _ to _ alias & # 34;

Android:layout _ width = & # 34;match _ parent & # 34

Android:layout _ height = & # 34;wrap _ content & # 34

Android:text = & # 34;切换到别名图标& # 34;/& gt;

& lt纽扣

Android:layout _ margin = & # 34;10dp & # 34

Android:id = & # 34;@+id/BTN _ change _ to _ default & # 34;

Android:layout _ width = & # 34;match _ parent & # 34

Android:layout _ height = & # 34;wrap _ content & # 34

Android:text = & # 34;切换到默认图标& # 34;/& gt;

& lt/linear layout & gt;

MainActivity.ja

公共类MainActivity扩展AppCompatActivity实现视图。OnClickListener{

@覆盖

受保护的void onCreate(Bundle sed instancestate){

super . oncreate(sedInstanceState);

setContentView(r . layout . activity _ main);

init view();

}

私有void initView() {

Button changeToAlias =(Button)findViewById(r . id . BTN _ change _ to _ alias);

Button changeToDefault =(Button)findViewById(r . id . BTN _ change _ to _ default);

changetoalias . setonclicklistener(this);

changetodefault . setonclicklistener(this);

}

@覆盖

公共void onClick(视图视图){

switch (view.getId()) {

案例编号. btn_change_to_alias:

change icon(& # 34;com . nan . breeze . main activity & # 34;);

打破;

案例编号. btn_change_to_default:

change icon(& # 34;com . nan . breeze . mainalias activity & # 34;);

打破;

默认值:

打破;

}

}

public void change icon(String activity path){

package manager pm = getPackageManager();

pm . setcomponentinabledsetting(getComponentName(),

PackageManager。组件已启用状态已禁用,包管理器。DONT _ KILL _ APP);

pm.setComponentEnabledSetting(新组件名(this,activityPath),

PackageManager。组件已启用状态已启用,包管理器。DONT _ KILL _ APP);

//重新启动加速桌面显示。

//restartSystemLauncher(pm);

}

public void restartSystemLauncher(package manager pm){

Activity manager am =(Activity manager)getsystem service(Activity。ACTIVITY _ SERVICE);

意向i =新意向(意向。ACTION _ MAIN);

i.addCategory(Intent。类目_首页);

i.addCategory(Intent。类别_默认);

列表& ltResolveInfo & gtresolves = pm . queryintactivities(I,0);

for (ResolveInfo res : resolves) {

if (res.activityInfo!= null) {

//调用此方法需要增加权限。

//& lt;uses-permission Android:name = & # 34;Android . permission . kill _ BACKGROUND _ PROCESSES & # 34;/& gt;

am . killbackgroundprocesses(RES . activity info . package name);

}

}

}

}

杀死桌面,更换应用图标,对用户来说有点突兀。我们只需要在适当的时候禁用激活,启动器延迟一段时间刷新图标也是一个选项。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论