记录一下:task-->通过点击h5链接,拉起目标app

第一:在清单文件中配置,启动的WeekUpActivity

<activity
            <!--要唤起的Activity-->
            android:name=".splash.WeekUpActivity"
            android:exported="true">
            <intent-filter>
                <!--可以根据用户的数据类型,打开相应的Activity-->
                <action android:name="android.intent.action.VIEW" />
                <!--界面可以被隐式调用-->
                <category android:name="android.intent.category.DEFAULT" />
                <!--界面可以通过浏览器的连接启动-->
                <category android:name="android.intent.category.BROWSABLE" />
                <!--协议部分,主要是配置scheme和host-->
                <data
                    android:host="jhq"
                    android:scheme="testclientapp"
                    android:path="/news"
                    android:port="8080"> />
            </intent-filter>
</activity>

第二:格式:scheme://host:port/path   ===》testclientapp://jhp:8080/news

  • 1.在手机微信里,通过微信内部浏览器拉起app
  1. 微信屏蔽了自定义的scheme访问的功能,无法在微信里直接拉起app
  2. 只能通过微信自家应用宝配置的链接,示例:[https://a.app.qq/o/simple.jsp?pkgname=包名&channel=1002160650427d595942&fromcase=10001] ,应用宝链接能判断出本地是否安装了该包名app,没安装会引导去应用宝下载,本地安装了会直接拉起app。
  • 2.在浏览器中(搜狗、百度、qq),通过URL Scheme 拉起app

另总结一下:Android拉起app的方法

//通过包名,打开目的app
private void openThirdApp2(){
        Intent intent2 = getPackageManager()
                .getLaunchIntentForPackage("包名");
        String classNameString = intent2.getComponent().getClassName();//得到app类名
        Intent intent  = new Intent();
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        intent.setComponent(new ComponentName("包名", classNameString));
        startActivity(intent);
    }


//通过包名,打开目的app
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;

private void openThirdApp1(){
        PackageManager packageManager = getPackageManager();
        Intent intent= packageManager.getLaunchIntentForPackage("包名");
        startActivity(intent);
    }

//可以拉起---发起app和拉起的app不在同一个栈里
private void openThirdApp3(){//可以拉起---发起app和拉起的app不在同一个栈里
        Intent intent = new Intent();
        intent.setData(Uri.parse("testclientapp://jhq:8080/news"));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }


//可以拉起---但在发起app和拉起的app在同一个栈里
private void openSchema(){//可以拉起---但在发起app和拉起的app在同一个栈里
        Intent it = new Intent();
        it.setAction(Intent.ACTION_VIEW);
        it.setData(Uri.parse("testclientapp://jhq:8080/news"));
        startActivity(it);
    }

参考:

https://www.sunzn/2017/07/18/%E4%BD%BF%E7%94%A8-URL-Scheme-%E5%94%A4%E8%B5%B7%E5%BA%94%E7%94%A8%E6%89%93%E5%BC%80-Activity/    使用 URL Scheme 唤起应用打开 Activity

https://blog.csdn/qq_40028324/article/details/103078599  关于h5唤起App的方式

https://wwwblogs/shadajin/p/5724117.html  iOS/Android 浏览器(h5)及微信中唤起本地APP

https://blog.csdn/wangzunkuan/article/details/95515175  运用scheme协议唤起外部app

https://blog.csdn/weixin_43917449/article/details/103393978  Android 使用scheme唤起app本地打开

https://blog.csdn/zhaohuiyan9837/article/details/78429079  android点击链接打开应用对应界面  (在应用杀死状态下,打开对应界面后,返回时为了不回到浏览器界面,可以借助TaskStackBuilder来实现(具体用法请查阅相关文档))

https://www.jianshu/p/1439c8bbc34b  Android 外部唤起应用跳转指定页面 TaskStackBuilder

https://blog.csdn/huaxun66/article/details/78274600  Android应用内跳转Scheme协议

https://github/ZHuiYan/WebOpenApp/tree/master   demo