关于android隐式启动activity的分析和说明,Android 隐式启动Activity之:action,category,data...

Android 启动Activity 分为两种:显示启动 和 隐式启动

显示启动:就是通过Intent 指明 那个包名+类名Activity,是开发中最常用的启动方式,在这就不说了,不是本文的目标

隐示启动:现在说一下隐式启动。隐式启动也是通过Intent ,不过必须给 Intent 加上匹配数据,匹配数据必须和目标Activity的其中一个过滤器配上,方可启动目标Activity。关于 匹配数据和 过滤器,请看下面:

可以隐式启动的Activity,必须在清单文件 AndroidManifest.xml里给这个Activity配置一个或多个过滤器,

下文 对 intent-filter 统称为:过滤器

这个过滤器的作用是:外部可以启动我这个Activity,但必须要匹配上我其中一个过滤器,就可以启动 这个Activity。

划重点!!!!------ 匹配上其中一个过滤器即可启动目标Activity

先上个Demo,过滤器是在 AndroidManifest.xml里面给Activity配置的。比如:

很明显,FilterActivity 配置了两个过滤器 ,说了那么久,那到底怎么样才算成功匹配上一个过滤器呢?

先别急,我们先看一下过滤器里面的构造,看上面配置可以看到,一个过滤器有三种参数,分别是:

1>  action

2>  category

3>  data

1和2参数的类型是字符型。3是 Uri + mimeType

还有,这三种参数,每一种参数可以有一个或多个。比如上面的

action参数: 就有 FilterActivity_Action1 和 FilterActivity_Action2  两个参数

category参数:就有 FilterActivity_Category1 和 FilterActivity_Category2 两个参数

data参数:有2个,形式是Uri + mimeType (具体是什么后面会说道)

现在暂且不说每个参数的细分匹配,就问:怎么才算完全匹配上一过滤器呢&#

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于Android编程的问题,我来尽可能详细地回答一下。 首先,我们需要明确一下,什么是隐式启动Activity隐式启动Activity是指当我们不知道或不关心应用程序的包名和类名时,可以通过指定Intent的ActionCategoryData等信息来启动相应的Activity。 下面是实现internet以隐式方式启动Activity并完成数据传递和结果返回的步骤: 1. 在AndroidManifest.xml文件中配置Activity,设置ActionCategoryData等信息。例如: ``` <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> </intent-filter> </activity> ``` 这个配置表示,当系统接收到一个http协议的Intent时,会打开MainActivity这个Activity。 2. 在MainActivity中,获取Intent中的数据。例如: ``` Uri data = getIntent().getData(); ``` 这个代码可以获取到Intent中的Uri数据,也就是访问的网址。 3. 在MainActivity中,将数据传递给另一个Activity。例如: ``` Intent intent = new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); intent.putExtra("data", data.toString()); startActivityForResult(intent, 1); ``` 这个代码会启动另一个Activity,并将data数据传递给它。其中,putExtra()方法用于传递数据,第一个参数是键名,第二个参数是值。 4. 在SecondActivity中,获取传递过来的数据。例如: ``` String data = getIntent().getStringExtra("data"); ``` 这个代码可以获取到MainActivity传递过来的data数据。 5. 在SecondActivity中,将结果返回给MainActivity。例如: ``` Intent intent = new Intent(); intent.putExtra("result", "success"); setResult(RESULT_OK, intent); finish(); ``` 这个代码会将一个结果值返回给MainActivity,并关闭SecondActivity。其中,setResult()方法用于设置结果值,第一个参数是结果码,一般用RESULT_OK表示成功;第二个参数是Intent对象,用于传递结果数据。 6. 在MainActivity中,获取返回的结果。例如: ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK) { String result = data.getStringExtra("result"); if (result.equals("success")) { // 处理成功的情况 } else { // 处理失败的情况 } } } ``` 这个代码会在SecondActivity返回结果后被调用,可以在其中获取到返回的结果值。 以上就是实现internet以隐式方式启动Activity并完成数据传递和结果返回的步骤。需要注意的是,如果要启动一个网页,需要添加INTERNET权限。例如: ``` <uses-permission android:name="android.permission.INTERNET" /> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值