android监听app
⑴ android通过什么来监听应用程序的启动
Android中可以使用ActivityManager来获得正在运行或者已经启动的程序,示例如下:
java">//查询所有正在运行的应用程序信息:包括他们所在的进程id和进程名
//这儿我直接获取了系统里安装的所有应用程序,然后根据报名pkgname过滤获取所有真正运行的应用程序
privateList<RunningAppInfo>queryAllRunningAppInfo(){
pm=this.getPackageManager();
//查询所有已经安装的应用程序
List<ApplicationInfo>listAppcations=pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
Collections.sort(listAppcations,newApplicationInfo.DisplayNameComparator(pm));//排序
//保存所有正在运行的包名以及它所在的进程信息
Map<String,ActivityManager.RunningAppProcessInfo>pgkProcessAppMap=newHashMap<String,ActivityManager.RunningAppProcessInfo>();
=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
//通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程
List<ActivityManager.RunningAppProcessInfo>appProcessList=mActivityManager
.getRunningAppProcesses();
for(ActivityManager.:appProcessList){
intpid=appProcess.pid;//pid
StringprocessName=appProcess.processName;//进程名
Log.i(TAG,"processName:"+processName+"pid:"+pid);
String[]pkgNameList=appProcess.pkgList;//获得运行在该进程里的所有应用程序包
//输出所有应用程序的包名
for(inti=0;i<pkgNameList.length;i++){
StringpkgName=pkgNameList[i];
Log.i(TAG,"packageName"+pkgName+"atindex"+i+"inprocess"+pid);
//加入至map对象里
pgkProcessAppMap.put(pkgName,appProcess);
}
}
//保存所有正在运行的应用程序信息
List<RunningAppInfo>runningAppInfos=newArrayList<RunningAppInfo>();//保存过滤查到的AppInfo
for(ApplicationInfoapp:listAppcations){
//如果该包名存在则构造一个RunningAppInfo对象
if(pgkProcessAppMap.containsKey(app.packageName)){
//获得该packageName的pid和processName
intpid=pgkProcessAppMap.get(app.packageName).pid;
StringprocessName=pgkProcessAppMap.get(app.packageName).processName;
runningAppInfos.add(getAppInfo(app,pid,processName));
}
}
returnrunningAppInfos;
}
⑵ Android 能不能监听到第三方应用App的启动和退出
答案是No,没有这样的broadcast,你没法用receiver去监听。唯一的办法就是后台查询。
整个后台线程,随时去遍历
// Get currently running application processes
List<ActivityManager.RunningAppProcessInfo> list = servMng.getRunningAppProcesses();
if(list != null){
for(int i=0;i<list.size();++i){
if("com.android.email".matches(list.get(i).processName)){
int pid = android.os.Process.getUidForName("com.android.email");
android.os.Process.killProcess(pid);
}else{
mTextVIew.append(list.get(i).processName + "\n");
}
}
}
⑶ Android 能不能监听到第三方应用App的启动和退出
在Android中,Activity有个栈,一个Activity结束掉,会回到上一个Activity,并不是退出应用程序。 Android中,退出应用程序的方式: 1.通过pid int pid = android.os.Process.myPid(); //获取当前应用程序的PID android.os.Process.killProcess(pid); //杀死当前进程 这种方法退出应用,是会保留某些后进程,例如:Service,Notifications等。 2.通过ActivityManager ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE); //获取应用程序管理器 manager.killBackgroundProcesses(getPackageName()); //强制结束当前应用程序 这种方式退出应用,会结束本应用程序的一切活动,因为本方法会根据应用程序的包名杀死所有进程包括Activity,Service,Notifications等。
⑷ Android 能不能监听到第三方应用App的启动和退出
可以,我原来做的是用一个计时器(为了准确率可以0.1s轮询一次)去监听手机的TopActivity,获取TopActivity的包名(应用的包名是唯一的),当TopActivity发生变化就说明使用的应用发生了改变,就实现了监听第三方应用的启动和退出(其中也包括系统应用,过滤包名就可以了)。有什么问题再问我
⑸ Android 能不能监听到第三方应用App的启动和退出
不能,没有这样的broadcast,没法用receiver去监听。唯一的办法就是后台查询。 整个后台线程,随时去遍历 // Get currently running application processes List list = servMng.getRunningAppProcesses(); if(list != null){
⑹ Android 能不能监听到第三方应用App的启动和退出
应该是可以的。还可以在应用内调用某些应用 或者 是获取并操作其他应用的数据,不过要有相关的权限或者ContentProvider。
监听程序启动见 某大神的博客:
http://blog.csdn.net/xiao_chilun/article/details/52096149
⑺ android 如何监听某app中 intent传参
//Bundle bundle = new Bundle(); //这句是多余的
Bundle bundle = this.getIntent().getExtras();
categorySelected = bundle.getString("category");
pcode = bundle.getString("pcode");
上面说的问题与你提的问题关系不大,感觉你的问题不太可能啊,请检查传入的时候:
bundle.putString("category", category);
请检查传入的时候category本来就是空指针。
检查过了,传入的时候是有值的,但是获取的时候就是null,pcode那个参数就可以,好郁闷啊
值都保持在一个map中,应该对汉字不汉字没有啥区别:Map<String, Object> mMap = null;
检查下,一,名字是否正确,二,是否有异常输出,如果获取失败,看源代码有异常输出的:
public String getString(String key) {
unparcel();
Object o = mMap.get(key);
if (o == null) {
return null;
}
try {
return (String) o;
} catch (ClassCastException e) {
typeWarning(key, o, "String", e);
return null;
}
}