android 获取所有正在运行的activity

android 获取所有正在运行的activity,第1张

首先是新建一个Android工程,然后修改mainxml文件如下:

添加一个ListView

[html] view plaincopy

<xml version="10" encoding="utf-8">

<LinearLayout xmlns:android=">

  android:orientation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  >

<ListView  

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

  android:id="@+id/tasklist"

  />

</LinearLayout>

然后编辑java代码

[java] view plaincopy

package comcaydenrun;

import javautilArrayList;

import javautilIterator;

import javautilList;

import androidappActivity;

import androidappActivityManager;

import androidappActivityManagerRunningTaskInfo;

import androidcontentContext;

import androidosBundle;

import androidwidgetArrayAdapter;

import androidwidgetListAdapter;

import androidwidgetListView;

public class MyActivityRunDemo extends Activity {

 

  private ListView tasklist=null;

  private ListAdapter adapter=null;

  private List<String> all=new ArrayList<String>();

  private ActivityManager activityManager=null;

  / Called when the activity is first created /

  @Override

  public void onCreate(Bundle savedInstanceState) {

      superonCreate(savedInstanceState);

      setContentView(Rlayoutmain);

     

      tasklist=(ListView)thisfindViewById(Ridtasklist);

     

      activityManager=(ActivityManager)supergetSystemService(ContextACTIVITY_SERVICE);

     

      listActivity();

  }

 

  public void listActivity(){

  List<RunningTaskInfo> tasks=  activityManagergetRunningTasks(30);

      Iterator<RunningTaskInfo> itInfo=tasksiterator();

      while(itInfohasNext()){

          RunningTaskInfo info=itInfonext();

          alladd("id="+infoid+","+infobaseActivitygetClassName());

         

      }

      adapter=new ArrayAdapter<String>(this, androidRlayoutsimple_list_item_1,thisall);

     

      tasklistsetAdapter(adapter);

  }

}

最后需要再配置所需要的权限AndroidManifestxml

[html] view plaincopy

<xml version="10" encoding="utf-8">

<manifest xmlns:android=">

    package="comcaydenrun"

    android:versionCode="1"

    android:versionName="10">

  <application android:icon="@drawable/icon" android:label="@string/app_name">

      <activity android:name="MyActivityRunDemo"

                android:label="@string/app_name">

          <intent-filter>

              <action android:name="androidintentactionMAIN" />

              <category android:name="androidintentcategoryLAUNCHER" />

          </intent-filter>

      </activity>

  </application>

  <uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="androidpermissionGET_TASKS"></uses-permission>

</manifest>

程序运行效果如图所示:

Android开发过程中我们有时需要使用第三方apk资源,而启动第三方apk在某些情况下需要指定相应的包名和启动的Activity名,这个时候就需要获取这两个名称,我们可以使用如下三种方法:

1、使用aapt //aapt是sdk自带的一个工具,在你安装的Eclipse路径下的sdk\build-tools\中,如我的是D:\Eclipse\androidTools\sdk\build-tools\android-442,如果你下载有apk反编译工具,也可以直接使用里面的aapt

以“GO备份apk”为例,先进入cmd命令行窗口,然后运行:D: -> Eclipse\androidTools\sdk\build-tools\android-442

-> aapt dump badging C:\Users\Administrator\Desktop\GO备份apk,即可获取到AndroidManifestxml中我们需要的内容,如

package: name='comjiubanggobackupex'

launchable-activity: name='comjiubanggobackupproStartupPageActivity'

2、查看AndroidManifestxml

同样是查看AndroidManifestxml,这里我们可以采用反编译方法来获取信息,同样是打开cmd命令行窗口,然后运行:E:

-> apk反编译工具\apktool\apktool -> apktoolbat d -f C:\Users\Administrator\Desktop\GO备份apk GO备份,然后打开“GO备份”文件夹,打开droidManifestxml文件,找到manifest节点的package属性值package="comjiubanggobackupex"语句即为包名,查找androidintentactionMAIN和androidintentcategoryLAUNCHER对应的activity,该activity对应的android:name属性即为入口activity名称,如<activity

android:name="comjiubanggobackupproStartupPageActivity"。

3、使用uiautomatorviewer

可以直接在命令行输入uiautomatorviewer,打开获取屏幕截图工具,连接手机,打开所要获取包名的应用,然后获取其截图,根据截图查看package即可,uiautomatorviewer的使用这里就不做介绍了。使用这个需要注意的是,该app必须是有界面的,否则无法获取。

另外,

androidintentactionMAIN 属性决定应用程序最先启动的Activity

androidintentcategoryLAUNCHER属性决定应用程序是否显示在程序列表里

注意到没有,UC前面有个统一标识:u0_a223他和10223,是不是后面223是一样的,我们看看这个代表什么意思

u0 默认的手机第一个用户(可以通过设置里面的多用户新增和切换)

a 代表app

223 代表着第223个应用

也就是说UC在我这个测试机中是滴223个应用,所以以后就可根据UID后面几位来定义追踪的被启动应用了

为了验证是不是这样,我们测试下,我们通过点击“launcher”来打开,看看是不是指向launcher

可以看到被启动的后几位id是082,那我们看看“launcher”

“u0_a82” 可以看到launcher”是“82”所以基本可以确定这种方法是可以确定被启动的应用名字是谁的。

参考此文章:

>

决定于AndroidManifestxml中设置

<activity

android:name="combmobimdemouiSplashActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="androidintentactionMAIN" />

<category android:name="androidintentcategoryLAUNCHER" />

</intent-filter>

</activity>

其中

<action android:name="androidintentactionMAIN" />

<category android:name="androidintentcategoryLAUNCHER" />

是设置启动页面

1、查看当前运行app的包名

2、通过包名查找apk的安装路径

3、查看当前运行的Activity名称

4、获取第三方APK的包名和入口类名

生成一个要被调用的APK。在其Manifestxml设置中,与一般的写法大致相同,唯一区别的地方在于

<activity

        android:name="comexampletestTestActivity"

        android:label="@string/app_name" >

 

    <!--<intent-filter>

             <action android:name="androidintentactionMAIN" />

 

             <category android:name="androidintentcategoryLAUNCHER" />

         </intent-filter> 

    -->

         <intent-filter >

              <action android:name="testApp"/>

              <category android:name="androidintentcategoryDEFAULT"/>

        </intent-filter>

</activity>

安装这个要被调用的APK。

安装完毕之后,你会发现,系统中找不到这个程序。别急,它确实安装在手机里面了,但是因为他不是main的,所以系统不会把他当做Application的入口程序。而要想打开这个activity,只有知道它名字的人才可以。跟系统的intent一样使用。它的名字定义为"testApp",所以,这里用这个字符串就可以调用它了

在另一个项目中调用上述APK。代码如下

Intent intent = new Intent("testApp");

startActivity(intent);

启动另外一个apk

Intent mIntent = new Intent( );   

ComponentName comp = new ComponentName(packageName, activityName);  

mIntentsetComponent(comp);   

mIntentsetAction("androidintentactionVIEW");   

startActivity(mIntent);

>

以上就是关于android 获取所有正在运行的activity全部的内容,包括:android 获取所有正在运行的activity、如何查看Android应用apk的包名和入口Activity名称、在 Android 中如何确定 App(Activity) 的启动者等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9579198.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存