Android----获得当前应用包名、当前activity的名字、判断是否是系统桌面、service类

1、获得当前应用包名

public static String getRunningActivityName(Context context) {

ActivityManager activityManager=(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

//完整类名

String runningActivity=activityManager.getRunningTasks(1).get(0).topActivity.getClassName();

String contextActivity = runningActivity.substring(runningActivity.lastIndexOf(".")+1);

return contextActivity;

}

2、获得当前activity的名字

public static String getAppPackageName(Context context){

ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

List<ActivityManager.RunningTaskInfo> taskInfo = activityManager.getRunningTasks(1);

ComponentName componentInfo = taskInfo.get(0).topActivity;

Log.d("lixx", "当前应用:" + componentInfo.getPackageName());

return componentInfo.getPackageName();

}

3、判断是否是系统桌面

/**

* 判断当前界面是否是桌面

*/

private boolean isHome() {

ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);

return getHomes().contains(rti.get(0).topActivity.getPackageName());

}

/**

* 获得属于桌面的应用的应用包名称

*

* @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);

}

return names;

}

4、典型的service类

public class FloatWindowService extends Service {

/**

* 用于在线程中创建或移除悬浮窗。

*/

private Handler handler = new Handler();

/**

* 定时器,定时进行检测当前应该创建还是移除悬浮窗。

*/

private Timer timer;

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

// 开启定时器,每隔0.5秒刷新一次

if (timer == null) {

timer = new Timer();

timer.scheduleAtFixedRate(new RefreshTask(), 0, 500);

Log.d("lixx", "=====定时刷新,监听悬浮窗的状态=====");

}

return super.onStartCommand(intent, flags, startId);

}

@Override

public void onDestroy() {

super.onDestroy();

// Service被终止的同时也停止定时器继续运行

timer.cancel();

timer = null;

}

class RefreshTask extends TimerTask {

@Override

public void run() {

//获得当前activity的名字

String activity_name = MyWindowManager.getRunningActivityName(getApplicationContext());

Log.d("lixx", "activity_name---->" + activity_name);

//获得应用程序包名

String pck_name = MyWindowManager.getAppPackageName(getApplicationContext());

Log.d("lixx", "pck_name---->" + pck_name);

// 当前界面是桌面,且没有悬浮窗显示,则创建悬浮窗。

if (isHome()) {

handler.post(new Runnable() {

@Override

public void run() {

Log.d("lixx", "桌面,移除悬浮窗!");

MyWindowManager.removeSmallWindow(getApplicationContext());

}

});

}else if(!TextUtils.isEmpty(activity_name)){

Log.d("lixx","activity_name is not null");

if(MyWindowManager.isShowingYKQ(activity_name) && pck_name.equals("com.ysten.istouch.client.screenmoving")){

handler.post(new Runnable(){

@Override

public void run(){

MyWindowManager.createSmallWindow(getApplicationContext());

}

});

}else{

handler.post(new Runnable() {

@Override

public void run() {

Log.d("lixx", "遥控器界面,移除悬浮窗!");

MyWindowManager.removeSmallWindow(getApplicationContext());

}

});

}

}else{

handler.post(new Runnable(){

@Override

public void run(){

MyWindowManager.removeSmallWindow(getApplicationContext());

}

});

}

}

}

时间: 2024-10-07 02:53:24

Android----获得当前应用包名、当前activity的名字、判断是否是系统桌面、service类的相关文章

查看Android应用包名、Activity的几个方法

一.没有apk,应用已经安装到手机或虚拟机中 1.手机有安装GT,打开可以看到包名: 2.logcat .清除logcat内容,使用命令adb logcat -c .启动logcat,使用命令adb logcat ActivityManager:I *:s .启动要查看的程序, 2.dumpsys (1)启动要查看的程序: (2)命令行输入:adb shell dumpsys window w |findstr \/ |findstr name= 补充:使用adb shell dumpsys w

Appium Android 获取包名和 Activity 的几种方法 (转)

本文档主要记录"获取包名和 Activity 的方法",用于自动化测试时启动APP.以下方法主要来源于网络和社区同学的贡献,特此感谢! 1. 方法一: pm list package查看包名 adb shell pm list package -f 将获取手机内所有apk对应的包名和路径 adb shell pm list package -3 -f #获取第三方apk的包 2. 方法二:dumpsys window(本人最常用) 先打开需要查找的apk后,再敲入以上命令 adb sh

二.第一个自动化demo,打开APP-如何获取包名和activity。(真机)

环境配置成功后,我们就可以进行第一个自动化测试了.用真机则不需要安装安卓模拟器.以一个简单的打开APP为例. 一.获取包名和activtity      启动一个app,我们需要知道它的平台.版本号.包名.activity等信息,其中两个比较难找的是包名和activtiy,其他的直接在手机或者用Itools都可以看到. 1)在之前配置的安卓SDK文件夹中找到sdkmanager.exe并启动,勾选一个版本的build-tools并下载. 2)下载成功后,找到appt.exe,并将这个路径加到 环

Appium+Python自动化 -获取 app 包名和 activity

方法一: ①手机通过USB连接电脑 ②打开手机上被测app ③在电脑上 dos命令窗口,输入命令 adb shell dumpsys window w | findstr \/ | findstr name= 或 adb shell dumpsys window |findstr mCurrent 或 adb shell "dumpsys window w|grep \/|grep name=|sed 's/mSurface=Surface(name=//g'|sed 's/)//g'|sed

如何获取app 的包名和activity 名

我们在进行手机自动化测试时经常要知道app 的包名和Activiy 名称,好多同仁刚学习时不知从哪去找,其实有好多种方法可以获取这些值 以下是针对无源码的情形,更适合于初学同仁 方法一 用重签名工具,这个在Robotium  中用得比较多 另外一种方式用命令方获取 Aapt dumpbadging xxxx.apk 第一个框为包名 第二个框为主Activity名 如果取包名与Activity在命令行中不方例还可以用以下方式获取 Aapt dumpbadging xxxx.apk  >c:\apk

monkeyrunner_获取apk的包名和activity名

一.使用adb获取单个apk的包名和Activity名称: 1.配置adb环境 a. 我的电脑点击右键-属性-高级-环境变量; b.  环境变量中新建PATH,变量值输入adb.exe工具所在目录; c.  检查是否成功,启动命令行,输入adb; 2.  手机连接电脑,开启USB调试,打开app,输入命令:adb devices,查看手机是否连接到电脑: 3.  doc窗口输入命令行:adb shell dumpsys activity | find "mFocusedActivity"

【monkeyrunner】浅谈包名和activity名

概念理解 包名:顾名思义,包名即为程序app的包名. activity名:每个界面都是一个activity. 两者关系:一个包有多个activity. Monkeyrunner中 device.startActivity("package名/activity")带入的是package名和activity入口,那么怎么获取到这两个呢? 可用重签名工具re-sign进行获取,把包拖进去,信息就出来了. 附录: 把测试包拖到re-sign进行重签名时,遇到如下问题: 解决办法: zipali

android 项目快速修改包名

快速批量的修改包名的有效 方法 在我们进行Android项目开发时,在某些情况下,我们需要修改已有项目工程中的包名. Eclipse提供了Android Tools->Rename Application Package的方法修改包名,然而这种方法常常不靠谱,会有异常情况发生. 经过实践表明,以下方法最简便靠谱: STEP 0: 在AndroidManifest.xml里手动修改package STEP 1: 将Build AutoMatically 去掉 STEP 2: 修改Src下的一级包名

命令查看当前运行APP的包名和Activity

先用usb链接手机 启动要查看的程序,命令查看当前运行的包名和Activity更清晰. 使用adb shell dumpsys window | findstr mCurrentFocus  命令查看当前运行的包名和Activity更清晰. 原文地址:https://www.cnblogs.com/zenghongfei/p/11741457.html