android.net.Uri及scheme://host:po

2018-04-08  本文已影响45人  苍蝇的梦

2017-11-09 遇到的一点小问题

.

Android通过android.net.Uri跳转其他应用,并传值,这个经常用到。比如跳转浏览器打开简书:

Uri uri = Uri.parse("http://www.jianshu.com/");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
//Intent intent = new Intent();
//intent.setAction(Intent.ACTION_VIEW);
//intent.setData(uri);
startActivity(intent)

这个其实就是Uri和Intent的处理。
关于android.net.Uri网上相关介绍很多,主要组成如下
scheme://host:port/path?query
示例Uri
Uri uri = Uri.parse("wannoo://abc:123/wan?key0=rrg&key1=qwer&key2=zxcv");
在跳转后的界面使用
Uri uri = getIntent().getData();
可以使用相应方法获取数据了。比如:
String scheme = uri.getScheme();//wannoo
String host = uri.getHost();//abc,没传值为""
int port = uri.getPort();//123,没传值默认-1
String path = uri.getPath();//wan,没传值为""
String query = uri.getQuery();//剩余后面那一串就是了,没传值为 null
String appkey = uri.getQueryParameter("key0");//rrg可以根据指定key来获取值

AndroidManifest.xml添加接收跳转的条件判断就可以。
不过要注意:
跳转

<intent-filter>
   <data
        android:host="app.wannoo.com"
        android:path="/${WANNOO_KEY}"
        android:scheme="wannoo"/>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"></category>
    <category android:name="android.intent.category.BROWSABLE"></category>
</intent-filter>

和 启动页

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

不能放一起啊,放一起启动页会没掉。应用图标当然也会没掉。
弄了个网页测了一下,系统自带的浏览器能正常打开:
<a href="wannoo://app.wannoo.com/app1key">测试</a>
带参数也是可以:
<a href="wannoo://app.wannoo.com/app1key?wannooData=cardprofit">测试</a>
需要在Activity里接收:
String parameter = getIntent().getData().getQueryParameter("wannooData");
因为android:path="/${WANNOO_KEY}"这个有写,所以跳转链接也要加上,如果没写直接:
<a href="wannoo://app.wannoo.com">测试</a>就可以了。

Uri uri = Uri.parse("alipayqr://platformapi/startapp?saId=10000007");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(intent);

Uri uri = Uri.parse("wannoo://app.wannoo.com/app1key?apppartner=rrg&appkey=0f3b64e67206ea8f35bae8ff9d891c0e&os=ios");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addCategory("com.a9580buy.www.myapplication");
startActivity(intent);

上一篇 下一篇

猜你喜欢

热点阅读