目标Activity需要在AndroidManifest.xml中添加intent-filter,并在其中添加action、category和data。如:
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<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"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http" android:host="baidu" android:port="8080" android:pathPrefix="/news"/>
</intent-filter>
</activity>
然后在目标Activity中的onCreate方法中实现参数的接收:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
// 网页链接如:<a href="http://baidu:8080/news/user=zhangsan&id=12345">去看百度新闻</a>
// 或者浏览器中直接输入URL也可跳转
String scheme = intent.getScheme();
System.out.println("scheme : " + scheme);
String dataString = intent.getDataString();
System.out.println("dataString : " + dataString);
Uri uri = intent.getData();
if (uri != null) {
// 完整URL信息
String url = uri.toString();
// scheme部分
String scheme2 = uri.getScheme();
// host部分
String host = uri.getHost();
// port部分
int port = uri.getPort();
// 访问路径
String path = uri.getPath();
// 编码路径
String encodedPath = uri.getEncodedPath();
// query部分
String query = uri.getQuery();
// 获取参数值
String user = uri.getQueryParameter("user");
String id = uri.getQueryParameter("id");
System.out.println("url : " + url + " , scheme : " + scheme2 + " , host : " + host
+ " , port : " + port + " , path : " + path + " , encodedPath : " + encodedPath
+ " , query : " + query + " , user : " + user + " , id : " + id);
}
}
}
另外,可以用下面命令进行验证:
adb shell am start -W -a android.intent.action.VIEW -d "http://baidu:8080/news/user=zhangsan&id=12345"