Android两个App之间跳转的方法

    最近的开发中遇到一个问题,需要在一个App中开启另一个App进行一些操作,经过几天的研究有了一些进展,现在分享给大家。

    第一种方法,使用Intent的隐式启动,通过设置Action去开启另一个App,如下例,先创建一个A项目,在A项目中的主Activity中的一个按钮的监听事件中写上下面的代码

        Intent intent = new Intent();
	intent.setAction("com.example.AIntent");
	intent.putExtra("data", "我是A的值");
        startActivity(intent);

    之后,再新建一个项目B,首先需要在清单文件中做一些操作,即在从A跳转过来时要开启的B中的某一个Activity的注册中书写一个过滤器,写上如下代码,注意下面name要与在A中设置的Action名字保持一致

      <intent-filter>  
	       <action android:name="com.example.AIntent"/>  
	       <category android:name="android.intent.category.DEFAULT"/>
      </intent-filter> 

    在B项目中的A要开启的Activity,使用下面的代码就可以接收到从A传过来的值

        Intent intent = this.getIntent();  
	if(null != intent.getStringExtra("data")){  
	  Log.v(TAG,intent.getStringExtra("data"));  
	}

    第二种方法,使用ComponentName来实现,在A项目的点击事件中写上如下代码

        Intent intent = new Intent(Intent.ACTION_MAIN);  
	intent.addCategory(Intent.CATEGORY_LAUNCHER);              
	ComponentName cn = new ComponentName(B项目的包名, B项目要开启的Activity的包名);             
	intent.setComponent(cn);  
	intent.putExtra("data", "我是A的值");
	startActivity(intent); 
    之后, 在B项目中的A要开启的Activity,使用下面的代码就可以接收到从A传过来的值

        Intent intent = this.getIntent();  
	if(null != intent.getStringExtra("data")){  
	  Log.v(TAG,intent.getStringExtra("data"));  
	}
    第三种方法,使用的是系统的方法,在A项目的点击事件中写上如下代码
       Intent intent = getPackageManager().getLaunchIntentForPackage(项目B的包名);
       Bundle bundle = new Bundle();
       bundle.putString("datas", data);
       intent.putExtra("data", bundle);
       startActivity(intent);

    之后, 在B项目中的A要开启的Activity,使用下面的代码就可以接收到从A传过来的值

     Intent intent = getIntent();
     Bundle bundle = intent.getBundleExtra("datas");
     if (bundle != null) {    
     Log.v(TAG,bundle.getString("data")); 
     }

     
 以上只是三种,本人将研究得出的方法,仅供参考,再次想要声明的是在开启另一个App的时候,是需要进行判断是否存在这个App,如下代码可以做个判断 
    PackageInfo packageInfo;
    String packagename =要判断的包名;
    try {
	packageInfo = getPackageManager().getPackageInfo(packagename, 0);
	} catch (NameNotFoundException e) {
	  packageInfo = null;
	 e.printStackTrace();
	}
    if (packageInfo == null) {
     //使用上面方法任意一种去开启App
    }else{
     Toast.makeText(this, "没安装该应用,可以去下载", Toast.LENGTH_SHORT).show();
    }








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值