通过Url打开app页面并传递参数
转载请注明出处:http://renyuan-1991.iteye.com/blog/2404247
今天记录并总结一下外部唤起app并传递参数相关的知识。
开门见山直接贴代码吧。
<activity android:name=".view.activity.UserLoginActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustPan"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"></action> <category android:name="android.intent.category.DEFAULT"></category> <category android:name="android.intent.category.BROWSABLE"></category> <data android:host="mytest.com" android:pathPrefix="/app" android:scheme="http"> </data> </intent-filter> </activity>
通过以上的设置,在包含“http://mytest.com/app”内容的短信或者网页中都可以打开我们的app。就这么简单!传入参数也很简单,如:“http://mytest.com/app?id=100”便可向app传递参数,在activity中添加以下代码用于接收参数。
Intent intent = getIntent(); String action = intent.getAction(); if(Intent.ACTION_VIEW.equals(action)){ Uri uri = intent.getData(); if(uri != null){ String id = uri.getQueryParameter("id"); Log.i("MyLog-UserLoginActivity", "onCreate: id = " + id); } }
可是为什么我没打开呢?
第一:检查<intent-filter>是否是单独配置,如果需要打开的页面已经有了<intent-filter>,那最好再建一个<intent-filter>,不要混在一起,否者无效。
第二:请按照以上的格式编写,并检查设置的scheme和调用链接的scheme是否一致。action和category也要和例子中的一致,为什么要这样设置,他们代表了什么意思?别着急,后面会说。
第三:如果在网页中调用,请不要用自己写的webview。需要用系统的浏览器。
第四:以上三点都符合,为什么在短信中还是调不起来?那是因为有些手机的短信(主要跟手机的系统版本有关)只识别http合https开头的scheme。对于这一点目前没有找到解决办法,如果哪位大佬解决了这个问题请在留言中告诉我,定感激不尽!
<action android:name="android.intent.action.VIEW"></action>的类型是有调用者决定的,我们想让系统的短息和浏览器打开我们的app,那就必须这么写,因为人家调用时指定的aciting是ACTION_VIEW。
<category android:name="android.intent.category.DEFAULT"></category>是隐式意图调用时必须的配置
<category android:name="android.intent.category.BROWSABLE"></category>是指定浏览器在特定情况下可以打开app。
就Android平台而言,URI主要分三个部分:scheme,authorityandpath。其中authority又分为host和port。格式如下:
scheme://host:port/path
举个实际的例子:
content://com.example.project:200/folder/subfolder/etc
\---------/\---------------------------/\---/\--------------------------/
schemehostportpath
\--------------------------------/
authority
也就是说可以在data标签中添加一下这些信息
<dataandroid:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string"/>
希望爱好编程的小伙伴能加这个群,互相帮助,共同学习。群号:141877583