Android DeepLink初体验

从浏览器点击一个网址.携带参数打开我们app的指定界面.这样的效果想想都很赞,所以就尝试一下咯

效果图:


基本上用到的知识就是隐式意图了

<activity android:name=".SecondActivity">
    <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="com.imgod.testdeeplink"
            />
    </intent-filter>
</activity>

com.imgod.testdeeplink 是我们的协议名字就像http://www.baidu.com 中的http一样,为了防止和别的app冲突,我们一般都是用包名来当作协议

在本地安装配置tomcat

写一个非常简单网页,内容是:

<a href="com.imgod.testdeeplink://1008615555">Try Deep Links</a>

简简单单,点击跳转即可

webapps\deeplink文件夹,浏览器请求的时候,就用ip加路径访问就行

我的是:192.168.1.111:8080//deeplink


package com.example.gk.testloadurlopenapp;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {

    public static final String CONTENT = "content";

    private TextView txt_result;

    /**
     * 显示意图
     *
     * @param activity 活动
     * @param content  传递的内容
     */
    public static void actionStart(Activity activity, String content) {
        Intent intent = new Intent(activity, SecondActivity.class);
        intent.putExtra(CONTENT, content);
        activity.startActivity(intent);
    }

    /**
     * 隐式意图
     *
     * @param activity 活动
     * @param content  传递的内容
     */
    public static void actionStart1(Activity activity, String content) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        Uri uri = Uri.parse("com.imgod.testdeeplink://app内隐式跳转"+content);
        intent.setData(uri);
        activity.startActivity(intent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        initView();
        initValue();
    }

    //如果有app有多个界面需要deeplink的话:
    //本来想host传递一个json串,然后在进行各种解析 相应跳转的呢.没想到把json串,放进host,拿不全,看来这种方式走不通
    //那么我们就可以在每个需要deeplink的界面分别指定不同的协议,然后在分别处理
    private void initValue() {
        Intent comeIntent = getIntent();
        if (null != comeIntent) {
            Uri uri = comeIntent.getData();
            //如果一个界面需要deeplink的话,也可以全走隐式意图进行跳转
            if (null != uri) {//隐式意图过来
                String txt = txt_result.getText().toString() + uri.getHost();
                txt_result.setText(txt);
            } else {//显意图过来
                String content = comeIntent.getStringExtra(CONTENT);
                String txt = txt_result.getText().toString() + content;
                txt_result.setText(txt);
            }
        }
    }

    private void initView() {
        txt_result = (TextView) findViewById(R.id.txt_result);
    }
}

git地址:https://github.com/imgod1/TestLoadUrlOpenApp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值