在开发的过程中 有时候可能会需要进行应用之间的跳转 而跳转又分为显式意图和隐式意图
首先说一下显示意图和隐式意图的区别
- 显式意图:明确指定组件名的Intent为显示意图,明确了Intent应该传递给那个组件。
- 隐式意图:没有明确指定组件名的Intent为隐式意图。
显示意图多用于应用内到跳转 也就是我们平时用的跳转方式 而隐式意图多用于多用于应用间的跳转*
因为显示意图需要明确知道报名和类名才能进行跳转 而跳转其他第三方应用 很有可能不知道他的包名和类名 除非是合作应用或者进行了反编译
假如 在知道包名类名的情况下 需要跳转到第三方的应用 就可以使用显示意图跳转 下面是例子
假如我们要跳转到浏览器搜索页面 浏览器的包名是 com.android.browser
搜索页面的类名为com.android.browser.BrowserActivity
那么有两种方法可以实现
第一种:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
startActivity(intent);
}
});
第二种:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
ComponentName componentName=new ComponentName("com.android.browser", "com.android.browser.BrowserActivity");
intent.setComponent(componentName);
startActivity(intent);
}
});
如果在不知道指定的Activity界面类名的情况下就需要跳转到指定的界面 这里需要隐式调用 依然是使用上面的包名
可以这样写
通过action和category来进行跳转指定的界面(这两个参数在应用API文档里面有标注 或者 可以直接网上找)
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("android.intent.action.SEARCH");
intent.addCategory("android.intent.category.DEFAULT");
intent.setPackage("com.android.browser");
}
});
还有一种情况就是不需要跳转到指定的界面 只需要打开应用 而且 只知道包名 怎么办 别慌 这样来:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.browser");
startActivity(intent);
}
});
这里需要说明一下Intent的setClass和setClassName的区别
setClass:跳转到与该工程下的(同一个Application中的)activity或者service
setClassName:跳转到不同Applicaiton的activity或者service