跳转到已安装的apk&&获取Android应用包名package和入口activity名称
2014-04-13 02:48
489 查看
Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。
一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:
但是更多的时候,我们一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过ResolveInfo类来取得启动Acitivty的类名。
下面是实现代码:
跳转到新的apk后,点击后退,新的 apk 是退出了,同时也将之前的apk也退出了?
需要在启动时添加一个flag:
这样做就可以!
获取Android应用包名package和入口activity名称
方法一:使用aapt //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
1.以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\apk\es3.apk
2.运行后的结果中以下两行分别是应用包名package和入口activity名称
package: name=’com.estrongs.android.pop’
launchable-activity: name=’com.estrongs.android.pop.view.FileExplorerActivity’
注:在android sdk目录搜索可以找到aapt.exe,如果没有可以下载apktool。
方法二:查看AndroidManifest.xml
1.使用apktool反编译app:apktool.bat d es3.apk E:\apk\es
2.打开AndroidManifest.xml
manifest节点的package属性值是应用的包名:<manifest package=”com.estrongs.android.pop”>
查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,如下:
<activity android:theme=”@*android tyle/Theme.NoTitleBar” android:label=”@string/app_name” android:name=”com.estrongs.android.pop.view.FileExplorerActivity”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
android.intent.action.MAIN决定应用程序最先启动的Activity
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); startActivity(intent);
但是更多的时候,我们一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过ResolveInfo类来取得启动Acitivty的类名。
下面是实现代码:
private void openApp(String packageName) { final PackageManager packageManager = getPackageManager(); PackageInfo pi = null; try { pi = getPackageManager().getPackageInfo(packageName, 0); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(pi == null || pi.packageName == null){ Toast.makeText(this, "还没安装!", 2000).show(); return; } Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(pi.packageName); List<ResolveInfo> apps = packageManager.queryIntentActivities(resolveIntent, 0); ResolveInfo ri = apps.iterator().next(); if (ri != null) { String pkgName = ri.activityInfo.packageName; String className = ri.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(pkgName, className); intent.setComponent(cn); startActivity(intent); } }
跳转到新的apk后,点击后退,新的 apk 是退出了,同时也将之前的apk也退出了?
需要在启动时添加一个flag:
Intent intent=new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(new ComponentName(objAppClassName, mainActivity)); context.startActivity(intent);
这样做就可以!
获取Android应用包名package和入口activity名称
方法一:使用aapt //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
1.以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\apk\es3.apk
2.运行后的结果中以下两行分别是应用包名package和入口activity名称
package: name=’com.estrongs.android.pop’
launchable-activity: name=’com.estrongs.android.pop.view.FileExplorerActivity’
注:在android sdk目录搜索可以找到aapt.exe,如果没有可以下载apktool。
方法二:查看AndroidManifest.xml
1.使用apktool反编译app:apktool.bat d es3.apk E:\apk\es
2.打开AndroidManifest.xml
manifest节点的package属性值是应用的包名:<manifest package=”com.estrongs.android.pop”>
查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,如下:
<activity android:theme=”@*android tyle/Theme.NoTitleBar” android:label=”@string/app_name” android:name=”com.estrongs.android.pop.view.FileExplorerActivity”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
android.intent.action.MAIN决定应用程序最先启动的Activity
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
相关文章推荐
- Android的所有权限说明
- Android 页面布局属性全
- Intent的几种用法
- Android系统设计中存在设计模式分析
- Android学习笔记(十六)进度条
- 《Android开发卷——ListView嵌套GridView(基础)》
- Android 默认显示两行的Spinner
- Android中Intent组件详解
- android: 调用webservice
- Android中的SharedPreferences存储数据方式
- android ndk jni 环境搭建
- android ndk jni 环境搭建
- 菜鸟学android——几个很实用的控件小技巧
- Android设置全屏
- Android中dpi、drawable和VGA的区别以及联系
- [Android界面0]图标选项卡效果,用TabActivity实现
- ubuntu 13.10搭建MTK android源码编译环境
- Android Fragment和Activity互相通讯
- Android无法加载第三方so的解决方法
- 利用 TTL 线连上 cubieboard nano flash 上的 Android 系统