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());

}

});

}

}





}

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

  1. Android Apk获取包名和Activity名称

    一.使用aapt(Android Asset Packaging Tool)工具获取: 1.配置Android环境: a.添加build-tools/android路径到系统环境变量的中Path中,注 ...

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

    本文档主要记录“获取包名和 Activity 的方法”,用于自动化测试时启动APP.以下方法主要来源于网络和社区同学的贡献,特此感谢! 1. 方法一: pm list package查看包名 adb ...

  3. android获取APP 包名和activity

    1.连接设备并启动被测试app应用 2.打开cmd窗口 3.windows获取包名和activity    adb shell dumpsys activity |find "mFocuse ...

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

    环境配置成功后,我们就可以进行第一个自动化测试了.用真机则不需要安装安卓模拟器.以一个简单的打开APP为例. 一.获取包名和activtity      启动一个app,我们需要知道它的平台.版本号. ...

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

    方法一: ①手机通过USB连接电脑 ②打开手机上被测app ③在电脑上 dos命令窗口,输入命令 adb shell dumpsys window w | findstr \/ | findstr n ...

  6. monkeyrunner_获取apk的包名和activity名

    一.使用adb获取单个apk的包名和Activity名称: 1.配置adb环境 a. 我的电脑点击右键-属性-高级-环境变量; b.  环境变量中新建PATH,变量值输入adb.exe工具所在目录; ...

  7. 【monkeyrunner】浅谈包名和activity名

    概念理解 包名:顾名思义,包名即为程序app的包名. activity名:每个界面都是一个activity. 两者关系:一个包有多个activity. Monkeyrunner中 device.sta ...

  8. 查看apk包名和Activity名

    今天遇到一个bug,比较有意思. 情景: 测试一个钻石提现功能,条件是账户里必须有价值等于或者超过50美元的钻石,才允许提现,否则无法进行下一步. 测试步骤: 提现页面输入一个小于50美元的提现金额, ...

  9. ptyhon获取app设备号、包名、activity

    直接上代码: import time import os import re import sys #------------------------------------------------- ...

随机推荐

  1. c++调用DOS命令,不显示黑屏

    WinExec("Cmd.exe /C md c://12", SW_HIDE); 注释:/c是什么意思,不用/C会报错 CMD [/A | /U] [/Q] [/D] [/E:O ...

  2. Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖

    题面 题意:给你100个三维空间里的点,让你求一个点,使得他到所有点距离最大的值最小,也就是让你找一个最小的球覆盖掉这n个点 题解:红书模板题,这题也因为数据小,精度也不高,所以也可以用随机算法,模拟 ...

  3. Spring Boot 打 war 包的步骤

    ## Spring Boot 打 war 包的步骤 1. 添加 spring-boot-start-tomcat 的 provided 依赖 ``` <dependency> <gr ...

  4. ccf 201803-4 棋局评估 (对抗搜索)

    棋局评估 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先.当同一种棋子占据一行.一列 ...

  5. ACM_开心消消乐

    开心消消乐 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大白最近喜欢上了开心消消乐,于是英语基础好的他准备让课文中英语句子也来 ...

  6. 这是一个无效的原路径/url

    当我们在SourceTree上新建一个“从URL克隆”的远程项目时,在确认“URL”无误的前提下依然报红色字体“这是一个无效的原路径/URL”错误,我们只需要快捷键“Command + ,”打开Sou ...

  7. 【java基础】(1)Java的权限修饰符(public,protected,default,private)

    访问权限修饰符权限从高到低排列是public  ,protected  ,default, private. 一.根据“是否是同包”.“是否是子类”分为4中情况+本类 5种情况 二.把 同包中的子类 ...

  8. android黑科技系列——微信定位聊天记录中照片的位置信息插件开发详解

    一.前言 最近关于微信中,朋友之间发送原图就可能暴露你的位置信息,其实这个问题不在于微信,微信是为了更好的体验效果,才有发送原图功能,而对于拍照,发送普通图片微信后台都会过滤图片的exif信息,这样就 ...

  9. 【Oracle】删除手工创建的数据库

    众所周知,DBCA创建的数据库可以通过DBCA命令删除,但是手工创建的数据库却不能用此方式删除,下面给出删除方式: SQL> startup mount exclusive SQL> al ...

  10. MatLab之HDL coder

    1 Workflow The workflow for applying HDL code generation to the hardware design process requires the ...