从app或web链接打开另一个app

总共有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中获取数据的方式和第一种情况 是一样

结尾:如果有帮助到你,就请你点赞关注一下啦

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值