关闭

如何获取屏幕上正显示的activity

标签: android获取topactivity
7431人阅读 评论(0) 收藏 举报
分类:

如何获取屏幕上正显示的activity?
       用过ActivityManager的童鞋估计都知道,可以从ActivityManager里面可以获取到当前运行的所有任务,所有进程和所有服务,这是任务管理器的核心。
         那么,从里面我们可以发掘点什么出来吗?
         仔细看getRunningTasks的文档,里面说获取的是系统中"running"的所有task,"running"状态包括已经被系统冻结的task。而且返回的这个列表是按照顺序排列的,也就是说第一个肯定比第二个后运行。
          getRunningTasks有个整型参数,表示返回列表的最大个数。那么,我们如果把1作为参数给进去,那么他返回的task就是当前运行的那个task,然后从task中获取到最顶层的activity,这个activity就是当前显示给用户的那个activity了。

Java代码  收藏代码
  1. ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);  
  2. ComponentName cn = am.getRunningTasks(1).get(0).topActivity;  
  3. Log.d("""pkg:"+cn.getPackageName());  
  4. Log.d("""cls:"+cn.getClassName());   
       至于这个能做什么,嘿嘿,我相信你知道的。

如何判断一个activity是否存在于系统中?
已知包名和类名,如何判断这个activity是否在系统中存在呢?很简单,通过intent就行。
Java代码  收藏代码
  1. Intent intent = new Intent();  
  2. intent.setClassName("包名""类名");        
  3. if(getPackageManager().resolveActivity(intent, 0) == null) {  
  4.     //说明系统中不存在这个activity  
  5. }  
如何让应用程序动态全屏和退出全屏?
    让程序全屏的方法,大家都知道,那是静态的,程序运行之初就申明了。但是如果有这样的需求:要在程序运行的过程中,执行了某个操作而使之全屏,然后还需要退出全屏,怎么做?
    如下:
Java代码  收藏代码
  1. WindowManager.LayoutParams attrs = getWindow().getAttributes();  
  2. attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;  
  3. getWindow().setAttributes(attrs);  
  4. getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);  
    修改window的LayoutParams参数,然后加上FLAG_LAYOUT_NO_LIMITS标志,就OK了。window会自动重新布局,呈现全屏的状态。
    要退出全屏,只需要清除刚才加上的FLAG_FULLSCREEN参数,然后去掉FLAG_LAYOUT_NO_LIMITS标志。
    如下:
Java代码  收藏代码
  1. WindowManager.LayoutParams attrs = getWindow().getAttributes();  
  2. attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  3. getWindow().setAttributes(attrs);  
  4. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);  
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:183283次
    • 积分:2384
    • 等级:
    • 排名:第16292名
    • 原创:19篇
    • 转载:227篇
    • 译文:0篇
    • 评论:9条
    最新评论