
首先是新建一个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设置中,与一般的写法大致相同,唯一区别的地方在于
<activityandroid: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) 的启动者等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)