android 怎样判断是否在桌面
3个回答
展开全部
按屏幕下方主页按钮,即可断定是否在桌面。
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。
推荐于2016-07-08 · 知道合伙人软件行家
关注
展开全部
判断过程有三个知识点。
1.如何找出正在运行的任务。 Android系统是支持多任务的,找到所有运行的任务是关键。
2.如何找出当前正在运行的任务。虽然android是多任务的系统,但是同时在前端运行的应用只会有一个。
3.如何找出桌面。
完整代码如下:
public boolean isHome(){
homes = getHomes();
ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<</span>RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
return homes.contains(rti.get(0).topActivity.getPackageName());
}
private List<</span>String> getHomes() {
List<</span>String> packages = new ArrayList<</span>String>();
PackageManager packageManager = ListenService.this.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
List<</span>ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
for(ResolveInfo info : resolveInfo){
packages.add(info.activityInfo.packageName);
System.out.println(info.activityInfo.packageName);
}
return packages;
}
1.如何找出正在运行的任务。 Android系统是支持多任务的,找到所有运行的任务是关键。
2.如何找出当前正在运行的任务。虽然android是多任务的系统,但是同时在前端运行的应用只会有一个。
3.如何找出桌面。
完整代码如下:
public boolean isHome(){
homes = getHomes();
ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<</span>RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
return homes.contains(rti.get(0).topActivity.getPackageName());
}
private List<</span>String> getHomes() {
List<</span>String> packages = new ArrayList<</span>String>();
PackageManager packageManager = ListenService.this.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
List<</span>ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
for(ResolveInfo info : resolveInfo){
packages.add(info.activityInfo.packageName);
System.out.println(info.activityInfo.packageName);
}
return packages;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-07-18 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517196
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
1、首先获得属于桌面的应用(系统原装应用、Go桌面等等)
分析:1)这些应用都会包含:"android.intent.category.Home";
2)所以只要找出所有的声明为Home的activity的"android.intent.action.MAIN"所在的包名就可以了!
代码如下:
/**
* 获得属于桌面的应用的应用包名称
* @return 返回包含所有包名的字符串列表
*/
private List<String> getHomes() {
List<String> names = new ArrayList<String>();
PackageManager packageManager = this.getPackageManager();
//属性
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
for(ResolveInfo ri : resolveInfo){
names.add(ri.activityInfo.packageName);
System.out.println(ri.activityInfo.packageName);
}
return names;
}
2、然后就是在你的应用中需要判断是否是桌面(在service或者新线程之类的)
分析:1)既然要判断当前界面,那就要判断当前的RunningTasks中的第一个;
2)引入ActivityManager获取RunningTasks;
3)取出RunningTasks中的topActivity的PackageName;
4)最后跟第一步得到的List做比较即可!
5)别忘了添加权限
<uses-permission android:name="android.permission.GET_TASKS" />
代码如下:
/**
* 判断当前界面是否是桌面
*/
public boolean isHome(){
ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
return homePackageNames.contains(rti.get(0).topActivity.getPackageName());
}
注:以上代码仅供参考,如需使用,可进行优化或者另行处理!
分析:1)这些应用都会包含:"android.intent.category.Home";
2)所以只要找出所有的声明为Home的activity的"android.intent.action.MAIN"所在的包名就可以了!
代码如下:
/**
* 获得属于桌面的应用的应用包名称
* @return 返回包含所有包名的字符串列表
*/
private List<String> getHomes() {
List<String> names = new ArrayList<String>();
PackageManager packageManager = this.getPackageManager();
//属性
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
for(ResolveInfo ri : resolveInfo){
names.add(ri.activityInfo.packageName);
System.out.println(ri.activityInfo.packageName);
}
return names;
}
2、然后就是在你的应用中需要判断是否是桌面(在service或者新线程之类的)
分析:1)既然要判断当前界面,那就要判断当前的RunningTasks中的第一个;
2)引入ActivityManager获取RunningTasks;
3)取出RunningTasks中的topActivity的PackageName;
4)最后跟第一步得到的List做比较即可!
5)别忘了添加权限
<uses-permission android:name="android.permission.GET_TASKS" />
代码如下:
/**
* 判断当前界面是否是桌面
*/
public boolean isHome(){
ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
return homePackageNames.contains(rti.get(0).topActivity.getPackageName());
}
注:以上代码仅供参考,如需使用,可进行优化或者另行处理!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询