繁体   English   中英

如何防止另一个包/活动通过我的应用程序在设备上运行?

[英]How to prevent another package/activity from running on the device through my application?

我有一个具有系统权限的应用程序。 当设备在重启后启动时,我的应用程序会显示一个 UI。 问题是,另一个活动(不是我的应用程序的一部分)也启动了,因此支持我的活动。

//my activity starts
ActivityManager: START u0 {flg=0x10000000 cmp=com.company.myApp/.activities.MyActivity} from uid 10097 on display 0

..... stuff happening -> UI is being updated 

// some other activity starts (automatically)
ActivityManager: START u0 {act=com.company.someOtherApp.Presentation.APL_RenderDocument flg=0x18000000 pkg=com.company.test cmp=com.company.test/.SomeOtherActivity (has extras)} from uid 10082 on display 0

// my activity goes into background.
MyActivity: onPause()
MyActivity: onStop()

有没有办法阻止创建(或运行)这个其他应用程序?

我正在研究两种特殊方法

setComponentEnabledSetting()

为 package 组件(活动、接收器、服务、提供者)设置启用设置。 此设置将覆盖任何已启用的 state,它可能已由组件在其清单中设置。

setApplicationEnabledSetting()

为应用程序设置启用设置此设置将覆盖任何已启用的 state,它可能已由应用程序在其清单中设置。 它还会覆盖清单中为任何应用程序组件启用的 state 集。 它不会覆盖由 setComponentEnabledSetting(ComponentName, int, int) 为应用程序的任何组件设置的任何已启用 state。

我不太明白这些方法是否可以实现我想要实现的目标的区别。

如果包/应用程序的“启用设置”/“启用状态”设置为禁用,是否意味着应用程序或 package 永远不会被调用?

还有另一种方法吗?

据我所知有两种方法

一个是kill进程

Process.killProcess( APP-PROCESS-ID )

或者你可以用活动管理器杀死后台进程

ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
am.killBackgroundProcesses(packageName);

声明此权限KILL_BACKGROUND_PROCESSES

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM