Intent跳转到其他应用页面

Android使用intent跳转到其它应用activity界面

关于这方面的理解:

1、使用包名和类名直接启动,前提是知道这两个。

1.1、启动主activity

Intent intent=new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
//参数是包名,类全限定名,注意直接用类名不行
ComponentName cn=new ComponentName("com.example.administrator.test",
        "com.example.administrator.test.MainActivity");
intent.setComponent(cn);
startActivity(intent);

1.2、启动非主的activity,非主的activity不能直接启动,必须要在manifest里面设置exported属性为true,表示此activity对外公开,才能直接跳转。

Intent intent=new Intent();
//参数是包名,类全限定名,注意直接用类名不行
ComponentName cn=new ComponentName("com.example.administrator.test",
        "com.example.administrator.test.Activity2");
intent.setComponent(cn);
startActivity(intent);

1.3、应当把这部分代码放到try块里面,跳转出错时捕获异常,否则异常会导致应用崩溃。

try
{
    Intent intent=new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    //参数是包名,类全限定名,注意直接用类名不行
    ComponentName cn=new ComponentName("com.example.administrator.test",
            "com.example.administrator.test.MainActivity");
    intent.setComponent(cn);
    startActivity(intent);
}catch (Exception e)
{
    Util.P.le("产生异常");
}

1.4、可以通过包名直接打开应用,启动的是默认的activity

PackageManager packageManager = getPackageManager();
Intent intent = new Intent();
intent = packageManager.getLaunchIntentForPackage("xxx");
startActivity(intent);

1.5、判断当前应用是否存在,并且传递uri的数据

private void handleIntent(Intent intent) {

// 隐式调用的方式startActivity

intent.setAction("XXX");

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setPackage("XXX");//设置包名,要先确认包名

PackageManager packageManager = getPackageManager();

List<ResolveInfo> activities = packageManager

.queryIntentActivities(intent, 0);

boolean isIntentSafe = activities.size() > 0;

if (isIntentSafe) {

startActivity(intent);

} else {

Toast.makeText(this, "未安装应用 , 无法跳转", Toast.LENGTH_SHORT).show();

}

private void openWithHomePageUri() {

Intent intent = new Intent();

intent.setData(Uri.parse("tenvideo2://?action=4&pull_from=10030"));

handleIntent(intent);

}

2、一般的。使用这种方法只能启动到系统的activity,没搞出来,待探究。
2.1、使用intent-filter的intent的属性配合起来用。
在xml文件中给对应的activity添加intentt-filter节点,再在节点下面添加各种属性。
要启动activity是,intent添加属性,当某个activity的intent-filter里面的属性包括了intent所含的所有属性,
则这个activity满足条件。当有 多个满足条件的activity时会让用户选择启动哪个 。
2.2具体的。
action:主要是代表这个activity所执行的动作。比如查看,编辑,拨打。相当于一个句子中的动词。另外还代表一些其他的特性,比如main。
category:分类,主要是指定activity是关于处理哪方面的信息的。比如地图,邮件。相当于一个句子的宾语。
data:传递数据用。调到其它的activity,有可能就会带一些数据,这个数据通过可以通过intent的putExtras传递,也可以通过data传递。
  extra传递必须知道key,适用于在一个应用中。在应用间传递就用data,data规定了格式等,就适用于在应用间传递一些规范了的数据。
data的结构较为复杂,字符串格式和url(http的)一样。“模式://主机:端口/路径”,在data节点下指这些值
这里有四个部分,指定其中几个部分为某值。比如指定模式为content,则intent必须指定模式为intent的,才能启动此acvitiy。
另外,有几种data的组合是不能指定的,比如缺少scheme的组合不行。
再另外:mimeType属性,也用于和前面的action搭配,指定动作的对象(宾语)。
2.3、注意的:(1) action,category,data,intent-filter这几个元素都是可以重复的,匹配时只选其中一个即可。

猜你喜欢

转载自blog.csdn.net/BaQiShiGuang/article/details/78840263
今日推荐