Android:H5 通过 URL Scheme 拉起app应用

记录一下: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.com/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.com/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.net/qq_40028324/article/details/103078599  关于h5唤起App的方式

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

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

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

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

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

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

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

Android开发中,android:scheme 是一个很重要的属性,用于指定一个应用程序的URI scheme。URI(Uniform Resource Identifier)是用于标识和定位资源的字符串,通常用于网络资源的访问。 通过在AndroidManifest.xml文件中使用 android:scheme 属性,可以告诉Android系统该应用程序支持通过特定的URI scheme来进行跳转。例如,可以指定一个自定义的URI scheme,比如"myapp",然后在其他应用程序中使用这个自定义URI来启动该应用程序。 具体步骤如下: 1. 在 AndroidManifest.xml 文件的<application>标签内部添加以下代码: ```xml <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="myapp" /> </intent-filter> ``` 这样就指定了该应用程序支持通过"myapp" scheme进行跳转。 2. 然后在其他应用程序中,可以通过以下代码来启动该应用程序: ```java String uriString = "myapp://example"; Uri uri = Uri.parse(uriString); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); ``` 在上述代码中,使用 Uri.parse() 方法将字符串转换为Uri对象,然后使用 Intent.ACTION_VIEW 和指定的Uri对象创建一个Intent对象,最后通过 startActivity() 方法启动该Intent。 通过以上步骤,就可以在其他应用程序中使用指定的URI scheme跳转到该应用程序。 需要注意的是,为了确保跳转成功,需要确保该应用程序已经安装在设备上,并且支持该指定的URI scheme
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值