总共有3种情况
一,从App A跳转到App B
示例1:
从一个 APP A 跳转到另一个 APP B的某个activity 例如DemoActivity
App A开启跳转的代码如下( 前提:知道要跳转应用的包名、完整的类名)
Intent intent = new Intent();
//前提:知道要跳转应用的包名、类名
ComponentName componentName = new ComponentName("com.shangmi.demo", "com.shangmi.demo.DemoActivity");
Bundle bundle=new Bundle();
bundle.putInt("key",i++);
intent.putExtras(bundle);
intent.setComponent(componentName);
startActivity(intent);
APP B的DemoActivity配置如下:
android:exported="true"
在 AnroidManifest 文件中给 DemoActivity节点设置 android:exported=“true”,该属性表示当前 activity 能否被另外一个Application 的组件启动,true允许启动,false不允许。默认是false
APP B的DemoActivity获取数据方式如下:
直接在onCreate()方法里面获取(DemoActivity为标准启动模式)
Intent intent=getIntent();
if (intent!=null) {
Bundle bundle=intent.getExtras();
if (bundle!=null) {
int value=bundle.getInt("key");
et.setText(value+"");
}
}
这里注意下 如果DemoActivity是singleTask/singleInstance启动模式,在DemoActivity没有关闭
的情况,第2次重复开启DemoActivity,就应该在如下方法里面获取数据:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent!=null) {
Bundle bundle=intent.getExtras();
if (bundle!=null) {
int value=bundle.getInt("key");
et.setText(value+"");
}
}
}
二,从App A或者外部链接 跳转到App B的DemoActivity
App B的DemoActivity在清单文件AndroidManifest中配置如下:
<activity android:name=".DemoActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
//系统默认添加的,一定要如下配置
<category android:name="android.intent.category.DEFAULT" />
//想被浏览器web链接激活,一定要如下配置
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="main"
android:scheme="app" />
</intent-filter>
</activity>
App A激活的话:代码如下:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse("app://main"));
//这里Intent当然也可传递参数,但是一般情况下都会放到上面的URL中进行传递
intent.putExtra("", "");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
如果是web链接激活的话:代码如下(通过web.html中的A标签来操作)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>html页面</title>
</head>
<body>
<h1>测试通过约定scheme,在浏览器中激活app B</h1>
<a href="app://main/abc">点我激活DemoActivity</a>
</body>
</html>
App B的DemoActivity获取数据的方式如下:
Intent intent= getIntent();
//获取完整的数据
String dataString = intent.getDataString();
Uri uri = intent.getData();
if (uri != null) {
//完整的url信息
String url = uri.toString();
//scheme部分数据
String schemes = uri.getScheme();
//host部分数据
String host = uri.getHost();
}
三,通过已知的包名 跳转到App B的DemoActivity(其实通过包名打开的是App B的launcher界面,launcher界面接受到数据后跳转到DemoActivity)
激活的代码如下:
Intent intent=getPackageManager().getLaunchIntentForPackage("com.shangmi.demo");
if (intent!=null) {
i++;
Bundle bundle=new Bundle();
bundle.putInt("key",i);
intent.putExtras(bundle);
// intent.putExtra("bundleKey",bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
App B的DemoActivity中获取数据的方式和第一种情况 是一样
结尾:如果有帮助到你,就请你点赞关注一下啦