android技术

Android实现打开第三方app

2021-04-09  本文已影响0人  奔跑的佩恩

前言

android开发过程中,我们有时会涉及到在本应用中打开第三方应用的需求,那么这里我封装了一个工具类——AppHelper,用于实现获取本设备中app安装列表及在本应用中打开第三方应用的功能,下面就来看看它的使用吧。

今天涉及内容:

  1. AppHelper 方法简介
  2. AppHelper 在 Activity 中的使用
  3. 第三方应用打开失败的可能原因
  4. 效果图和项目结构图
  5. 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 中的使用

下面贴出AppHelperTempActivity 中使用代码:

@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源码如下:

上一篇下一篇

猜你喜欢

热点阅读