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);