前言
在android
开发过程中,我们有时会涉及到在本应用中打开第三方应用的需求,那么这里我封装了一个工具类——AppHelper
,用于实现获取本设备中app安装列表及在本应用中打开第三方应用的功能,下面就来看看它的使用吧。
今天涉及内容:
- AppHelper 方法简介
- AppHelper 在 Activity 中的使用
- 第三方应用打开失败的可能原因
- 效果图和项目结构图
- AppHelper 源码
先来波效果图
效果图.gif
一.AppHelper 方法简介
AppHelper
主要方法如下:
/**获取设备安装的app列表信息**/
public static List<AppInfo> getAppInfos(Context context)
/***
* 根据包名打开一个app
*
* @param context
* @param packageName: 包名全称,如:"com.ss.android.article.lite"
*/
public static boolean openAppByPackageName(Context context,String packageName)
二.AppHelper 在 Activity 中的使用
下面贴出AppHelper
在TempActivity
中使用代码:
@RequiresApi(api = Build.VERSION_CODES.N)
public class TempActivity extends AppCompatActivity implements View.OnClickListener {
private TextView mTvTest;
private Button mBtnTest;
private Button mBtnTest2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
//初始化控件
initView();
//初始化数据
initData();
//控件监听
setListener();
}
/**
* 初始化控件
**/
private void initView() {
mTvTest = findViewById(R.id.mTvTest);
mBtnTest = findViewById(R.id.mBtnTest);
mBtnTest2 = findViewById(R.id.mBtnTest2);
}
private void initData() {
}
/**
* 控件监听
**/
private void setListener() {
//点击事件
mBtnTest.setOnClickListener(this);
mBtnTest2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.mBtnTest:
LogUtil.i("======获取本设备安装的app列表======");
//获取本设备安装的app列表
List<AppInfo> list = AppHelper.getAppInfos(TempActivity.this);
StringBuffer buffer = new StringBuffer();
for (AppInfo info : list) {
if (info.isUserApp()) {
buffer.append(" "+info.getAppName() +" "+info.getApkSize()+" "+info.getPackageName()+"\n");
}
}
LogUtil.i(buffer.toString());
mTvTest.setText(buffer.toString());
break;
case R.id.mBtnTest2:
LogUtil.i("=====打开今日头条极速版======");
//打开今日头条
String jinri="com.ss.android.article.lite";
boolean flag=AppHelper.openAppByPackageName(TempActivity.this,jinri);
LogUtil.i("===打开应用是否成功: "+flag);
break;
default:
break;
}
}
}
三. 第三方应用打开失败的可能原因
当我们调用openAppByPackageName(Context context,String packageName)
返回false
时,先要确定你写的包名是正确的,如果这种情况下,依然返回false
,则需要考虑你调试的设备是否安装了要打开的软件。判断的话,可以先遍历本机安装的app
,然后看是否含你要打开的app
四. 效果图和项目结构图
效果图.gif效果图.png
五. AppHelper 源码
AppHelper
的使用涉及到一个model
类——AppInfo
,下面贴出AppInfo
代码:
public class AppInfo {
//应用图标
private Drawable icon;
//应用的名字
private String appName;
//应用程序的大小
private String apkSize;
//表示用户程序
private boolean isUserApp;
//存储的位置.
private boolean isSD;
private String packageName;
public Drawable getIcon() {
return icon;
}
public void setIcon(Drawable icon) {
this.icon = icon;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getApkSize() {
return apkSize;
}
public void setApkSize(String apkSize) {
this.apkSize = apkSize;
}
public boolean isUserApp() {
return isUserApp;
}
public void setUserApp(boolean userApp) {
isUserApp = userApp;
}
public boolean isSD() {
return isSD;
}
public void setSD(boolean SD) {
isSD = SD;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
@Override
public String toString() {
return "AppInfo{" +
"icon=" + icon +
", appName='" + appName + '\'' +
", apkSize='" + apkSize + '\'' +
", isUserApp=" + isUserApp +
", isSD=" + isSD +
", packageName='" + packageName + '\'' +
'}';
}
}
AppHelper
源码如下:
网友评论