欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 运维知识 > android >内容正文

android

android 禁止更换桌面,android中如何禁用其他应用,并且不在桌面显示 -ag凯发k8国际

发布时间:2024/10/8 android 0 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 android 禁止更换桌面,android中如何禁用其他应用,并且不在桌面显示 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1.首先需要系统签名。

2.达到的效果:

应用被禁用后,图标也从桌面上消失。

3.参考settings源码,最终实现的代码如下:

package="com.example.testdiableapp"

android:versioncode="1"

android:shareduserid="android.uid.system"

android:versionname="1.0" >

android:name="android.permission.change_component_enabled_state"

android:protectionlevel="signatureorsystem"/>

........

public class mainactivity extends activity {

@override

protected void oncreate(bundle savedinstancestate) {

super.oncreate(savedinstancestate);

setcontentview(r.layout.activity_main);

init();

}

private void init(){

button bt = (button)findviewbyid(r.id.dis);

bt.setonclicklistener(new view.onclicklistener() {

@override

public void onclick(view arg0) {

edittext text = (edittext)findviewbyid(r.id.input);

string packagename = text.gettext().tostring();

packagemanager pm = getpackagemanager();

pm.setapplicationenabledsetting(packagename, packagemanager.component_enabled_state_disabled_user, 0);

}

});

button en = (button)findviewbyid(r.id.en);

en.setonclicklistener(new view.onclicklistener() {

@override

public void onclick(view arg0) {

edittext text = (edittext)findviewbyid(r.id.input);

string packagename = text.gettext().tostring();

packagemanager pm = getpackagemanager();

pm.setapplicationenabledsetting(packagename, packagemanager.component_enabled_state_default, 0);

}

});

}

}

4.settings中的源码分析:

从这段代码可以看出,进入设置的app管理中,如果是system app,就会显示“disable“,非system app,则会显示“uninstall“。

如下图:

当点击disable之后,弹出对话框确认是否执行disable动作:

case dlg_disable:

return new alertdialog.builder(getactivity())

.settitle(getactivity().gettext(r.string.app_disable_dlg_title))

.setmessage(getactivity().gettext(r.string.app_disable_dlg_text))

.setpositivebutton(r.string.dlg_ok,

new dialoginterface.onclicklistener() {

public void onclick(dialoginterface dialog, int which) {

// disable the app

new disablechanger(getowner(), getowner().mappentry.info,

packagemanager.component_enabled_state_disabled_user)

.execute((object)null);

}

})

.setnegativebutton(r.string.dlg_cancel, null)

.create();

点击确认执行:

static class disablechanger extends asynctask {

final packagemanager mpm;

final weakreference mactivity;

final applicationinfo minfo;

final int mstate;

disablechanger(installedappdetails activity, applicationinfo info, int state) {

mpm = activity.mpm;

mactivity = new weakreference(activity);

minfo = info;

mstate = state;

}

@override

protected object doinbackground(object... params) {

mpm.setapplicationenabledsetting(minfo.packagename, mstate, 0);

return null;

}

}

调用packagemanager的setapplicationenabledsetting()最终会进入到packagemanagerservice的setenabledsetting()函数:

在这个函数中会检查app是否有android.manifest.permission.change_component_enabled_state权限。

而这个权限是只有system app才能使用的,这也是为什么app需要系统签名。(非system app即便在androidmanifest.xml中强制写上,安装时也不会写入/data/system/packages.xml)

安装后package.xml中的内容:

nativelibrarypath="/data/data/com.example.testdiableapp/lib" flags="1"

ft="152e863d9e0" it="152e8a98806" ut="152e8a98806" version="1" shareduserid="1000">

5.最后的效果图:

以禁用联系人(com.android.contacts)这个app来demo:

禁用前:

在demo中输入要被com.android.contacts:

禁用后联系人图标已经消失了:

测试在4.0.3 -> 6.0.1 上运行没有问题。

其余版本没有测试过。

总结

以上是ag凯发k8国际为你收集整理的android 禁止更换桌面,android中如何禁用其他应用,并且不在桌面显示的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图