美文网首页
android采用Chrome Intent方式实现从浏览器启动

android采用Chrome Intent方式实现从浏览器启动

作者: 如果俞天阳会飞 | 来源:发表于2021-10-14 20:23 被阅读0次

    来源:https://blog.csdn.net/sinat_26503455/article/details/51655517

    在很多应用中需要我们从浏览器中直接启动应用,而网上大多数采用的是scheme的方式,即在启动activity的mainfest文件中配置如下字段:

    
    <activity android:name=”com.example.MainActivity”>
      <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=”example” android:host=”test” />
      </intent-filter>
    </activity>
    

    然后在网页的连接设置为example://test/… 来启动应用,但是如果手机中没有应用,该url会跳转到一个错误的界面。
    google官方在chrome中推出了一种Android Intents的方式来实现应用启动,通过在iframe中设置src为

    
    intent:HOST/URI-path // Optional host
    #Intent;
    package=[string];
    action=[string];
    category=[string];
    component=[string]; 
    scheme=[string];
    end;
    

    的方式,具体示例如下。
    我们定义一个a标签为

    <pre name="code" class="html"><pre name="code" class="html"><a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;end">Do Whatever</a>
    

    然后在mainfest文件中定义要启动的activity

    <activity android:name=".TestUrlScheme" >
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" /><!-- 显示数据 -->
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" /><!-- 定义成浏览器类型,有URL需要处理时会过滤 -->
                    <data android:scheme="myapp" android:host="whatever" android:path="/" /><!-- 打开以whatever协议的URL,这个自己随便定义。 -->
                </intent-filter>
    </activity>
    

    然后在浏览器中点击a标签,就可以启动应用程序的对应activity了,如果手机中没有相应的应用,那么是否会跳转到错误页面呢,将a标签设置为

    <a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.browser_fallback_url=http%3A%2F%2Fzxing.org;end">Do Whatever</a>
    

    这样如果没有对应应用,该链接就会跳转到S.browser_fallback_url指定的url上。

    如果我们还需要对在a标签中对指定activity进行传值呢?那也有办法,参考stackoverflow上面的一个回答点击打开链接,将a标签设置为

    <a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.name=Perico%20de%20los%20Palotes;I.age=35;end">Do Whatever</a>
    

    其中参数的类型如下

    String => 'S'
    Boolean =>'B'
    Byte => 'b'
    Character => 'c'
    Double => 'd'
    Float => 'f'
    Integer => 'i'
    Long => 'l'
    Short => 's'
    

    然后在启动activity的onCreate函数中利用bundle接收参数就行了

    Bundle parametros = getIntent().getExtras();
    if (extras != null){
        String name = extras.getString("name");
        Integer age = extras.getInt("age");
     
        if (name!=null && age!=null)
        {
           //do whatever you have to
           //...
        }
    }else{
         //no extras, get over it!!
    }
    

    至此,通过浏览器启动app就大功告成了,但是需要注意的是,很多第三方浏览器会拦截掉chrome intent启动应用的请求,像uc,微信内置浏览器,QQ浏览器等,在这些页面要做一个提示,让用户跳转到源生的浏览器上才能打开应用。

    相关文章

      网友评论

          本文标题:android采用Chrome Intent方式实现从浏览器启动

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