关于Android 程序跳转到 相应app的相关操作

关于Android 程序跳转到 相应app的相关操作

 

示例代码

try {  

    PackageManager packageManager = getPackageManager();   

    Intent intent=new Intent();   

    intent = packageManager.getLaunchIntentForPackage("com.tencent.mm");  

    startActivity(intent);  

} catch (Exception e) {  

    e.printStackTrace();  

    Intent viewIntent = new  

    Intent("android.intent.action.VIEW",Uri.parse("http://weixin.qq.com/"));  

    startActivity(viewIntent);  

}   

上面一段代码以微信为例实现的功能为:如果用户的手机上装有微信app,则直接打开微信app,否则跳转到相应的网页去下载微信app;

 

Android的清单文件AndroidManifest.xm中我们知道一个Android程序有且只有一个包名,如果包名重复 版本号一致将无法安装app ,当包名一样版本号不一致,如果版本号高于用户当前安装程序的版本,将安装成功,反之失败。

intent是Android组件之间相互通信的依赖,

app之间的跳转实质就是activity之间的跳转,

上段代码中利用包名通过PackageManager类来获取微信的消息,进行分装成一个intent,这个intent就带有从当前的app跳转到微信的信息或者称消息。

通过startActivity(Intent intent)方法将带有当前的app跳转到微信的信息或者称消息的intent发送给Android底层,这样就实现了程序跳转到相应app的操作

 

如果说我们需要传递参数到微信app上上面的代码我们可以改成

try {  

    PackageManager packageManager = getPackageManager();   

    Intent intent=new Intent();   

    intent = packageManager.getLaunchIntentForPackage("com.tencent.mm");  

 

    intent.putExtra("name", "lipengchen");

intent.putExtra("birthday", "19940530");

 

    startActivity(intent);  

} catch (Exception e) {  

    e.printStackTrace();  

    Intent viewIntent = new  

    Intent("android.intent.action.VIEW",Uri.parse("http://weixin.qq.com/"));  

    startActivity(viewIntent);  

}  

这里我们添加了

intent.putExtra("name", "lipengchen");

intent.putExtra("birthday", "19940530");

两行代码,相当于将name = lipengchen 和 birthday =19940530的值给了intent

这样intent中就包涵了关键字为name值为lipengchen的消息或信息和关键字为birthday值为19940530的消息或信息。

假设我们可以操作微信app的代码如何去接受intent传过来的值呢?

 @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        Intent intent = getIntent();

        Bundle bundle = intent.getExtras();

        if (bundle != null) {

            String name = bundle.getString("name");

            String birthday = bundle.getString("birthday");

            if (name != null && birthday != null) {

                Toast.makeText(getApplicationContext(), "name:" + name + " birthday:" + birthday, Toast.LENGTH_SHORT).show();

            }

        }

}

上段代码中我们需要获取传递过来的intent及 Intent intent = getIntent();这段代码,

再通过关键字就能拿到我们传递过来的消息或信息

  String name = bundle.getString("name");

  String birthday = bundle.getString("birthday");

 因为 intent.putExtra("name", "lipengchen")存放的值是放在Bundle类下的,所以我们要先拿到intent中的Bundle类对象bundle = intent.getExtras();

 经过研究,必须每次都要打开启动的Activity才能接收到及MainActivity,因为传递过来的参数就是送到启动的Activity(android.intent.action.MAIN),在其他Activity怎么能拿到参数数据。所以必须每次跳转过来都要第一个打开启动的Activity,这是一种解决方法。如果我们知道跳转的相应的activity的类名也可以采用下面的代码来实现

Intent intent = new Intent(Intent.ACTION_MAIN);  

intent.addCategory(Intent.CATEGORY_LAUNCHER);              

ComponentName cn = new ComponentName(packageName, className);              

intent.setComponent(cn);  

startActivity(intent);

ComponentName是用来打开其他应用程序中的Activity或服务的。

这里需要注意的是  在特定的activity的清单中需要写上如下的配置,action可以为空 也可以指定

 

<intent-filter>

  <action android:name="" />

</intent-filter>

 

以上是关于Android程序跳转到相应app的相关操作的普通写法。

 

经过测试app 存在特殊情况:该app采用的是ionic框架 属于H5混合式开发,可以实现由该app跳转到其他源生app指定activity中,也可以由其他源生app跳转到该app,

app可以向源生app传值,但接受由源生的传递过来的参数尚未解决,有待进一步研究,因为ionic只有一个activity 如果跳转到时ionic已经使用将显示的是ionic最后出现的界面。

如果要跳转到相应的App需要提供相应App的包名,如果需要向相应App传递参数则需要统一参数的键值。拿到值的相应操作在获取数据方App中实现。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值