美文网首页
第三方调起APP方式代码

第三方调起APP方式代码

作者: 见字如晤一 | 来源:发表于2021-11-01 11:04 被阅读0次

    很久没搞第三方调起APP的流程了,特别是转了kotlin之后,写起代码来有些生疏了,在此记录一下:
    第一种方式:调起LAUNCHER页面:

    //通过包名启动第三方应用启动页
        fun startLaunchAPK(context: Context, packageName: String) {
            Log.d(tag, "启动中。。。" + packageName)
            var mainAct: String? = null
            val pkgMag = context.packageManager
            val intent = Intent(Intent.ACTION_MAIN)
            intent.addCategory(Intent.CATEGORY_LAUNCHER)
            intent.flags = Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED or Intent.FLAG_ACTIVITY_NEW_TASK
            //如果已经启动apk,则直接将apk从后台调到前台运行(类似home键之后再点击apk图标启动),如果未启动apk,则重新启动
            @SuppressLint("WrongConstant")
            val list = pkgMag.queryIntentActivities(
                intent,
                PackageManager.GET_ACTIVITIES
            )
            for (i in list.indices) {
                val info = list[i]
                if (info.activityInfo.packageName == packageName) {
                    mainAct = info.activityInfo.name
                    break
                }
            }
            if (TextUtils.isEmpty(mainAct)) {
                return
            }
            //启动到app的主页或启动到原来留下的位置
            intent.component = ComponentName(packageName, mainAct!!)
            //启动app
            context.startActivity(intent)
            Log.d(tag, "启动成功。。。")
        }
    

    注意:这种方式需要在被调起的页面的清单上加入允许被第三方(外部)调起标识

    android:exported="true"
    

    第二种方式:知道第三方包名和需要被调起的页面名称(是完整路径哦!!!)

    /**
         * 该方法,通过包名,调起指定类
         */
        fun startLaunchAPK(context: Context, packageName: String, activityName: String) {
            val intent = Intent()
            Log.d(tag, "指定类名跳转 >>> pkgName " + packageName + "   activityName >>> " + activityName)
            // 启动指定的activity页面
            intent.component = ComponentName(packageName, activityName)
            //启动app
            context.startActivity(intent)
            Log.d(tag, "启动成功。。。")
        }
    

    第三种方式:也是我觉得最灵活好用的方式,通过schema方式配置调用
    1、在第三方清单上配置schema,通常自己新建一个SchemeFilterActivity类,专门用来过滤处理schema跳转:

    <activity android:name=".SchemeFilterActivity">
                <intent-filter>
                    <data
                        android:host="xx.zzz.yy"
                        android:scheme="arouter" />
    
                    <action android:name="android.intent.action.VIEW" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
                </intent-filter>
            </activity>
    
    

    2、调起方代码方式:

    fun startAPKBySchema(context: Context) {
            val data: Uri =
                Uri.parse("arouter://xx.zzz.yy/boot/BootActivity?token='xxxx'&name='jjjj'")
            val intent = Intent(Intent.ACTION_VIEW, data)
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            //启动app
            context.startActivity(intent)
            Log.d(tag, "启动成功。。。")
        }
    
    

    相关文章

      网友评论

          本文标题:第三方调起APP方式代码

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