1、我们经常会需要判断当前的手机是否安装的某个apk,来给出提示。
/**
* 检查手机上是否安装了指定的软件
* @param context
* @param packageName:应用包名
* @return
*/
public boolean isAvilible(Context context, String packageName){
//获取packagemanager
final PackageManager packageManager = context.getPackageManager();
//获取所有已安装程序的包信息
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
//用于存储所有已安装程序的包名
List<String> packageNames = new ArrayList<String>();
//从pinfo中将包名字逐一取出,压入pName list中
if(packageInfos != null){
for(int i = 0; i < packageInfos.size(); i++){
String packName = packageInfos.get(i).packageName;
packageNames.add(packName);
}
}
//判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE
return packageNames.contains(packageName);
}
例如:需要判断当前手机是否安装百度地图的时候,如果没有安装并给出符合用户体验的提示。
/**
* 驾车导航
*/
protected void startNavi(double startLat, double startLong, double endLat, double endLong, String startName, String endName) {
if(isAvilible(WebActivity.this,"com.baidu.BaiduMap")) {
try {
RouteParaOption para = new RouteParaOption();
para.endName(endName);
para.endPoint(new LatLng(endLat, endLong));
para.startName("我的位置");
BaiduMapRoutePlan.openBaiduMapDrivingRoute(para,
CommonUtil.getContext());
} catch (Exception e) {
e.printStackTrace();
showDialog();
}
}else {
showDialog();
}
}
/**
* 提示未安装百度地图app或app版本过低
*/
public void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("您尚未安装百度地图app或app版本过低,点击确认安装?");
builder.setTitle("提示");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
OpenClientUtil.getLatestBaiduMapApp(WebActivity.this);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
2、调用指定的软件
Intent intent = this.getPackageManager().getLaunchIntentForPackage(
"com.demo.test");
startActivityForResult(intent, REQUEST_CODE2);