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);
}
}
}
}
杀死桌面,更换应用图标,对用户来说有点突兀。我们只需要在适当的时候禁用激活,启动器延迟一段时间刷新图标也是一个选项。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。