如何通过浏览器链接启动本地 Activity

我们都知道打开Activity的方式有2种,即显示意图和隐式意图.那么如何实现通过手机浏览器点击某个链点就能打开手机中已经安装的app呢?通过隐式意图就能实现这个功能.

先来看一段html代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>Document</title>
	<style type="text/css">
		a{
			font-size: 40px;
		}
	</style>
</head>
<body>
	<a href="app://launch/hello app">启动AppTerminalActivity</a>
</body>
</html>

代码很简单,就是一个a链接,目的是通过该a链接去启动目标app.其中app://对应的就是隐式意图的<data>标签的scheme属性.

再来看一段对应的目标Activity的隐式意图的定义:

<activity android:name=".AppTerminalActivity">
<intent-filter>
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.VIEW" />
                <data android:scheme="app"  />
</intent-filter>
</activity>

其中android.intent.category.BROWSABLE就是表示可以通过浏览器打开的类别.

最重要的就是<data android:scheme="app"  />,这里定义了数据的协议,当然还可以定义很多的属性,这里我们定义scheme就够用了.一定要对应上面的a链点的协议,即app://,后面可以附带需要传递给目标app的一些数据.

然后我们在目标activity中接收a链点点击后传递过来的数据,显示在TextView上.代码如下:

/**
 * Created by mChenys on 2015/11/1.
 */
public class AppTerminalActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textView = new TextView(this);
        textView.setText(getIntent().getData().toString());
        setContentView(textView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    }
}
通过Intent的getData方法,该方法返回的是一个Uri对象,通过toString方法我们就可以查看到完整的数据了.

效果图:

通过手机浏览器打开目标网页


点击启动就可以启动目标Activity了.


可以看到getData拿到了a链点的整个href的属性值.


当然除了scheme属性,我们还可以设置host和pathPrefix属性,分别表示为主机名和路径前缀

 <intent-filter>
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.VIEW" />
                <data
                    android:host="blog.csdn.net"
                    android:pathPrefix="/mChenys"
                    android:scheme="app" />
            </intent-filter>
效果如下:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值