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

}

});

}

}





}

最新文章

  1. Java内部DNS查询实现和参数设置
  2. 如何在MATLAB R2010a 中使用Visual C++ 2010编译器
  3. 介绍开源的.net通信框架NetworkComms框架 源码分析(三)PacketHeader
  4. ios截取号码
  5. mysql 5.6.33发布
  6. App.Config 在windows 服务中的应用问题
  7. 单机部署redis主从备份
  8. RPC(Remote Procedure Call Protocol)
  9. mysql添加远程用户
  10. 使用jquery实现返回顶部按钮
  11. Coursera, Big Data 3, Integration and Processing (week 1/2/3)
  12. JavaScript “函数重载”
  13. 别老扯什么hadoop,你的数据根本不够大
  14. 【SVN】关于钩子的一些使用
  15. 抓包工具 GOOGLE
  16. PB测款方法 店铺运费模板 设置
  17. BZOJ.5312.冒险(线段树)
  18. 股票F10
  19. 新旧版ubuntu镜像免费下载
  20. 构建Uber端到端技术栈的十条经验(转载)

热门文章

  1. Power Network(最大流(EK算法))
  2. 数据通讯与网络 第五版第24章 传输层协议-UDP协议部分要点
  3. python重定向原理及实例
  4. C - Alice, Bob and Chocolate(贪心)
  5. css的选择器效率分析
  6. angularJS之ng-bind与ng-bind-template的区别
  7. angular js 正序倒叙
  8. QS之force(1)
  9. CXF-JAX-WS开发(二)spring整合CXF-JAX-WS
  10. 初探CORBA组件化编程