美文网首页android技术
Android实现打开第三方app

Android实现打开第三方app

作者: 奔跑的佩恩 | 来源:发表于2021-04-09 11:22 被阅读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源码如下:

    相关文章

      网友评论

        本文标题:Android实现打开第三方app

        本文链接:https://www.haomeiwen.com/subject/gcrikltx.html