自定义的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这方法多余,
或许你可以尝试以仅仅启动服务的形式启动。
==-1的**的时候,程序都会提示自定义的对话框,我这里设置的是没3秒提示一次直到系统destroy了除自定义process的程序外。
发起原由: 某些产品项目需要后台的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的程序外。
相关文章推荐
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android中获取正在运行的服务:ActivityManager.RunningServiceInfo的使用
- Android获得手机所有应用(非系统)、正在运行的Service和Activity
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用(三)
- Android 获取正在运行的服务 ActivityManager.RunningServiceInfo使用
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- Android ActivityManager 检测Service与Activity是否正在运行
- Android学习笔记(九)之Android 获取正在运行的Activity
- Android判断某一应用是否正在运行与判断某一Service是否正在运行
- 判断Activity,Service是否正在运行
- Android高手之路之获取正在运行的service,以及判断某个service是否正在运行
- 如何检查后台服务(Android的Service类)是否正在运行?