获取整机应用信息以及启动界面(通过adb启动应用)
2016-01-07 15:30
363 查看
通过Context.getPackgeManager来获取你关心的应用信息,包括icon、应用名、版本号等。
但是如果要让你的脚本能够在任何界面下不通过点击图标而启动应用,除了包名之外还需要主Activity的信息,以下的AppInfo中,通过配置Intent,过滤出了主Activity信息。
最后,可以通过如下方式启动被测应用(我的应用背景是自己写一个Android应用,把整机所有的应用都放到一个spinner中供用户选择,用户点击被测应用,则进入该应用):
初始化spinner
执行adb命令:
am start -n pkgName+"/"+actName
以下是AppInfo.java文件
但是如果要让你的脚本能够在任何界面下不通过点击图标而启动应用,除了包名之外还需要主Activity的信息,以下的AppInfo中,通过配置Intent,过滤出了主Activity信息。
最后,可以通过如下方式启动被测应用(我的应用背景是自己写一个Android应用,把整机所有的应用都放到一个spinner中供用户选择,用户点击被测应用,则进入该应用):
初始化spinner
//获取应用信息 ArrayList<AppInfo> appList = AppInfo.getAllAppsInfo(); //适配器 AppAdapter adapter = new AppAdapter(this, appList); //加载适配器 app_spi.setAdapter(adapter);
//获取被选中的应用 AppInfo appInfo = (AppInfo) app_spi.getSelectedItem(); //获取被测应用信息 String pkgName=appInfo.packageName; String actName=AppInfo.getLancherActvity(appInfo.packageName);
执行adb命令:
am start -n pkgName+"/"+actName
以下是AppInfo.java文件
import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import com.meitu.travelapk.SharedApplication; import java.util.ArrayList; import java.util.List; /** * 应用信息 * Created by CrystalChen on 2016/1/6. */ public class AppInfo { public String appName = ""; public String packageName = ""; public String versionName = ""; public int versionCode = 0; public Drawable appIcon = null; /** * 通过包名,获取主Activity信息 * @param pkgName 包名 * @return 主Activity信息 */ public static String getLancherActvity(String pkgName){ String name=""; Context context= SharedApplication.context; Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> apps = context.getPackageManager().queryIntentActivities(intent, 0); for (int i = 0; i < apps.size(); i++) { if (apps.get(i).activityInfo.packageName.equals(pkgName)){ name = apps.get(i).activityInfo.name;//得到所有app的主Activitivy, } } return name; } /** * 获取设备上所有的应用信息,包括系统应用 * @return 应用信息 */ public static ArrayList<AppInfo> getAllAppsInfo() { Context context= SharedApplication.context; //获取应用信息 ArrayList<AppInfo> appList = new ArrayList<>(); //用来存储获取的应用信息数据 List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0); for (int i = 0; i < packages.size(); i++) { PackageInfo packageInfo = packages.get(i); AppInfo tmpInfo = new AppInfo(); tmpInfo.appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString(); tmpInfo.packageName = packageInfo.packageName; tmpInfo.versionName = packageInfo.versionName; tmpInfo.versionCode = packageInfo.versionCode; tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(context.getPackageManager()); appList.add(tmpInfo); } return appList; } /** * 获取设备上所有的非系统级应用信息 * @return 应用信息 */ public static ArrayList<AppInfo> getNonSystemAppsInfo() { Context context= SharedApplication.context; //获取应用信息 ArrayList<AppInfo> appList = new ArrayList<>(); //用来存储获取的应用信息数据 List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0); for (int i = 0; i < packages.size(); i++) { PackageInfo packageInfo = packages.get(i); // 非系统应用 if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_EXTRACT_NATIVE_LIBS) == 0) { AppInfo tmpInfo = new AppInfo(); tmpInfo.appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString(); tmpInfo.packageName = packageInfo.packageName; tmpInfo.versionName = packageInfo.versionName; tmpInfo.versionCode = packageInfo.versionCode; tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(context.getPackageManager()); appList.add(tmpInfo); } } return appList; } }
相关文章推荐
- mysql-mysql优化
- 从头开始编写一个Orchard网上商店模块(1) - 介绍
- iOS高德定位和自带逆地理编码进行坐标转换
- 跟我一起写 Makefile(六)
- Python 对图片进行人脸识别
- 复选框的全选
- The content of element type "web-app" must match "(icon?,display-name?,description?,distributable?,c
- What are the differences between Apache Kafka and RabbitMQ?
- Egret)Demo - eui state自定义状态的使用
- linux grep 查找文件内容
- 跟我一起写 Makefile(五)
- COMODO防火墙专业版下载
- secureCRT
- jQuery全屏滚动插件fullPage.js
- CocoaPods制作
- javascript原型链初识
- Bash的24个陷阱分析
- MyBatis简介与配置MyBaits+Spring+MySql
- Linux删除除了某些文件之外的所有文件(夹)
- Opencv读取各种格式图片,在TBitmap上面重绘