您的位置:首页 > 移动开发 > Android开发

自定义的Android service 监控正在运行的Activity

2013-03-16 20:24 393 查看
分享一个Android 如何实现Service 在后台监控正在运行的Activity
发起原由: 某些产品项目需要后台的Service来控制当前运行的Activity,然后做出处理,本人要处理的是当系统在某种情况下,禁止用户运行某些Activity,达到自定义控制 。

设计思路:

Activity激发自定义的AppControlService后退出,后台运行的AppControlService使用ActivityManager获取当前系统的AppInfo,从而使用killBackgroundProcess某些Activity,同时弹出自定义的对话框提示,禁止用户运行。

当系统打开了想禁止的Activity,Service会频繁弹出对话框提示想提示的信息,从而达到目的。如果需要获取系统权限,去彻底删除正在打开的Activity,我想,下一步要做的获取系统Root。这样的文章很多,在此不阐述了,这需要对应的SDK Source,并更改签证。

好吧,下面提供部分关键源码:

一、启动一个Activity来启动Service,然后Kill himself这方法多余,

或许你可以尝试以仅仅启动服务的形式启动。

public class App_ControlActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app__control);
Intent intent = new Intent(App_ControlActivity.this,AppService.class);
startService(intent);
Log.v("MingServer", "start Service");
android.os.Process.killProcess(android.os.Process.myPid());
}}
二、启动的服务,获取当前系统进程的信息,存入一个List里面:
mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List l = mActivityManager.getRunningAppProcesses();
Iterator i = l.iterator();
三、根据信息过滤,然后做出相应操作:
while(i.hasNext())
{
try {
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
//保护你想保护的进程,采用 info.processName.indexOf(”com.android“) != -1 来判断
if(info.processName.indexOf("com.android") != -1|| ** ==-1){}
mActivityManager.killBackgroundProcesses(info.processName);
//android.os.Process.killProcess(info.pid);
Log.i("process","kii the process"; + info.processName);
//TODO: 本人在此发送了一个消息,因为这运行在thread的run()函数里
Message msg = new Message();
msg.what = 1;
mHandler.sendMessage(msg);
}catch(Exception e){
//TODO: you want to do.
}
Handler那里,当Handle获得消息时,会弹出Activity的自定义对话框,在此不再描述了。 至此,当系统有运行除了名字为自定义包含"com.android"或者**
==-1的**的时候,程序都会提示自定义的对话框,我这里设置的是没3秒提示一次直到系统destroy了除自定义process的程序外。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐