Android菜鸟学步之Intent
来源:互联网 发布:知乎 好书推荐 编辑:程序博客网 时间:2024/04/29 08:53
Intent
Intent
分为显式和隐式,显式的在前面实际上已经用过很多次了,这里主要讲隐式。
显式Intent
:
先在AndroidManifest
中注册,(实际上在Android studio
中如果是新建的一个Activity,这一步是完全需要的,如果是自己建立的Java文件和xml文件,那么需要手动配置一下注册信息),注册信息很简单:
<activity android:name=".MyAty" /> <activity android:name=".Main2Activity"> </activity>
上面一个是我手动注册的,另一个是建立Activity
时自动注册的,并没有什么区别。 startActivity(new Intent(MainActivity.this,MainActivity.class));
隐式Intent
- 配置Action
在AndroidManifest
中配置相关信息,在Activity中添加一个子标签intent-filter
,用DEFAULT
即默认的category
,而默认的行为方式为Activity
,接下来再指明一个action
,事实上它可以为任意一个字符串,启动的时候根据这个字符串来启动。我写的是abcdefg
然后在
<activity android:name=".MyAty"> <intent-filter> <categoryandroid:name="android.intent.category.DEFAULT"/> <action android:name="abcdefg"/> </intent-filter> </activity>
接下来在MainActivity的Intent中直接传上面的字符串进来: startActivity(new Intent("abcdefg"));
以上过程经过测试
值得注意的是,为了统一或者说,为了方便调用,对于上面的字符串,在编程中大家有了一个约定俗成的格式,就是包名.intent.action.Activity名,比如 com.example.hp.lanchmode.intent.action.MyAty
如果都按照这个格式的话我们进行调用就比较方便了。
这确实是一个好方法,但是也有一个显著的缺点,难记!太长了嘛。所以我们在被启动的Activity中定义一个静态常量字符串 public static final String ACTION=
"com.example.hp.lanchmode.intent.action.MyAty";
这样我们就不用在MainActivity中用那么长的内容来启动了,直接: startActivity(new Intent(MyAty.ACTION));
这样就调用了那么长的一个字符串了,就可以实现启动了啊,其实很简单,其实很自然。
这种启动方式其实还可以用作不同应用间的Activity
启动,因为在A
应用里面是不可能获得B
应用的类定义的,那么就可以用action
的方式来启动。
首先在工程中new
一个module
,然后命名为app2
,之后一键next下去,就建立了一个新的应用,如果打开模拟器,会发现确实出现了名为app2
的应用。
然后我们在这个应用的Activity
startActivity( new Intent("com.example.hp.lanchmode.intent.action.MyAty"));
这样就可以实现跨应用访问Activity了
就可以了。这里我比较奇怪的是,为什么上面说了用My.ACTION,
现在不用了。
那么如果不想让别的应用访问呢?只需要在AndroidManifest写这么一句:
<activity android:name=".MyAty" android:exported="false">
androd:exported
默认是true
的,也就是说默认是可以访问的,我们改为false
就只能在一个应用程序的内部进行访问了。
我们在上面已经了解到在Intent-filter
中定义action
可以以字符串的方式进行启动,那么如果我们在两个不同的Activity中定义相同的action的字符串呢,会启动哪一个呢?实际上,会给我们选择,让我们挑选一个进行打开,这就好比我们在qq里面要打开一个链接,可能会让我们选择用哪个浏览器来进行打开。
为了解决这样一个问题,其实还有方法,就是在Intent-filter中配置data信息,这个不再说了。
那么我就想问了,Intent(包括隐式和显式)特别是隐式启动的原理是什么呢?它的运作过程是怎么样的呢,现在我是知道了靠调用这个startActivity
就可以启动另一个Activity
,那么是怎么实现的呢?这些还有待深究。
- Android菜鸟学步之Intent
- Android菜鸟学步之Service
- Android菜鸟学步之Context
- Android菜鸟学步之AIDL
- Android菜鸟学步之启动模式
- 菜鸟学步之磨刀石篇
- 菜鸟学步之Service通信
- 菜鸟学步之Service通信(2)
- android蹒跚学步
- 学步
- 【Android】Android之intent
- Android之intent
- Android之intent
- Android之Intent&BroadcastReceiver
- Android 基础知识之Intent
- Android之Intent详解
- Android之Intent
- android组件之Intent
- jQuery性能优化的28个建议
- 自定义VIew之APP常用手势密码对程序加锁,解锁控件
- 批量删除C#注释(适用于vs开发环境)
- leetcode Different Ways to Add Parentheses
- uboot.2015.07移植之从NAND Flash启动(5)
- Android菜鸟学步之Intent
- 拆分变化或有规律部分为单独类且统一接口
- pageEncoding和charset有什么区别
- selinux m4语言语法
- Delphi异常处理try except语句和try finally语句用法以及区别
- Centos6.5 iptables配置详解
- 解决eclipse下载插件奇慢的问题
- 个推与信鸽平台的深入剖析
- 严格单一接口和严谨调用点