文章来自:http://blog.youkuaiyun.com/intbird
1,intentfilter说明:
如果说是将一个activity有其他应用打开,或者是在webView 或者 bybird app中调用我们自己的activity,
那么就可以使用intentfilter来过滤我们自己需要的activity;
*uri参数说明 Java Code:
final Uri uri = Uri.parse("intbird://com.intbird.soft/testing/tested?name='Test'");
TextView textView = (TextView)findViewById(R.id.textView);
textView.setText(uri.getScheme() + "\n" //intbird
+ uri.getPort() + "\n" //-1
+ uri.getAuthority() + "\n" //com.intbird.soft
+ uri.getHost() + "\n" //com.intbird.soft
+ uri.getPath() + "\n" // /testing/tested
+ uri.getPathSegments() + "\n" // [tesing,tested]
+ uri.getQuery()+"\n"); // name='Text'
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.setData(uri);
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,0);
boolean isIntentSafe = activities.size() > 0;
if(isIntentSafe){
startActivity(intent);
}else{
Toast.makeText(MainActivity.this, "匹配None", Toast.LENGTH_SHORT).show();
}
}
XML Code:
NOTE : 必须有category标签
<activity
android:name=".MyIntentFilter"
android:label="@string/app_name" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT"></category>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="intbird" android:host="com.intbird.soft"/>
</intent-filter>
</activity>
2,结合网页调用加深理解
uri:
final Uri urihttp = Uri.parse(“https://www.baidu.com/s?wd=intbird“);
//schma : http
//host : www.baidu.com
//path : /s
//query : wd= intbird
XML
<activity
android:name=".MyIntentFilter2"
android:label="@string/app_name" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="https" android:host="www.baidu.com" />
</intent-filter>
</activity>
匹配scheme,匹配host多个,弹出 Intent Chooser
3,同理,我们如果有多个activity;
if 两个都一样:
<activity
android:name=".MyIntentFilter"
android:label="@string/app_name" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT"></category>
<action android:name="android.intent.action.SENDTO"/>
<data android:scheme="intbird" android:host="com.intbird.soft"/>
</intent-filter>
</activity>
<activity
android:name=".MyIntentFilter2"
android:label="@string/app_name" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.SENDTO"/>
<data android:scheme="intbird" android:host="com.intbird.soft" />
</intent-filter>
</activity>
So:
but: add path [ android:path=”/testing” ] to one,startActivity directly