探究活动之--隐式Intent
来源:互联网 发布:cf经常网络出现异常 编辑:程序博客网 时间:2024/05/17 05:05
前面学习了显式Intent,那么相比于显式Intent,隐式Intent则含蓄了很多,它不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent。并帮助我们找出合适的活动去启动。
那到底什么叫做合适的活动呢?我们来看一下AndroidManifest.xml中的内容。
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="com.example.activitytest1.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter></activity>
这段代码式AndroidManifest.xml中SecondActivity的<activity>标签里的内容,通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category。我们可以看到,在<action>标签中,指明了当前活动可以响应com.example.activitytest1.ACTION_START这个action。而<category>标签则更精确的指明了当前活动能够响应的Intent中还有可能带有的category。只有<action>和<category>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应Intent。
现在我们修改FirstActivity中按钮的点击事件,如下所示:
public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); //在活动中加载first_layout布局 Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ Intent intent = new Intent("com.example.activitytest1.ACTION_START"); startActivity(intent); } }); }}
在这段代码中,可以看到,Intent中使用了另一个构造函数,直接将action的字符串传进去,表明我们想要启动能够响应com.example.activitytest1.ACTION_START的这个action活动。现在我们运行一下程序,来看一下效果:
在FirstActivity界面点击button1按钮,跳转到了SecondActivity活动界面。可以看到,我们成功的通过隐式Intent启动了合适的活动。
但是,前面不是说要<action>和<category>要同时匹配才能响应吗?怎么没有看到FirstActivity的Intent中指定category呢?这是因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法时会自动将这个category添加到Intent中。
现在我们在FirstActivity中指定一个category,代码如下所示:
public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); //在活动中加载first_layout布局 Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ Intent intent = new Intent("com.example.activitytest1.ACTION_START"); intent.addCategory("com.example.activitytest1.MY_CATEGORY"); startActivity(intent); } }); }}
在button1点击事件中,我们调用Intent中的addCategory()方法来添加一个category,这里我们指定了一个自定义的category,值为com.example.activitytest1.MY_CATEGORY。现在运行一下程序,来看一下效果:
点击button1,我们发现,程序竟然崩溃了。这是什么原因呢?我们从崩溃日志中发现,原来是因为没有任何一个活动可以响应我们的Intent。为什么呢?这是因为我们刚刚在Intent中新增了一个category,而SecondActivity的<intent-filter>标签中没有声明响应这个category,我们找不到响应的活动,自然程序就会崩溃。现在我们来添加一个category,如下所示:
现在SecondActivity的<intent-filter>标签中有对应响应的category了,来运行一下程序,我们发现,一切正常。
关于隐式Intent的用法还有很多,比如打开一个网页或者拨打电话等功能,都是万变不离其宗,大家理解了这篇隐式Intent的用法之后,其他的也就迎刃而解了。
阅读全文
0 0
- 探究活动之--隐式Intent
- 探究活动之--显式Intent
- Android之Intent探究
- 安卓活动之Intent的整理
- 第一行代码学习笔记-第二章 探究活动-2.Intent的使用
- XiAOTAO的Android修炼之路(一)-探究活动
- Android Activity活动探究
- Android学习,探究活动
- Android(探究活动)
- Android : 手动探究活动
- 探究活动-Activity
- Android 一一 探究活动
- Android Activity探究活动
- Android开发之Intent及IntentFilter的探究学习
- 基础之Intent向下,向上一个活动个传递数据
- Android学习 (三) 在活动之间穿梭之Intent
- 四大组件之活动(Intent、生命周期、启动模式)
- Android中Intent探究
- 18.activiti工作流-业务层面
- Javascript中apply、call、bind
- PHP中的求模和自加自减运算符
- linux压缩命令
- Android 技术重温系列 (13)- Style 和 Theme
- 探究活动之--隐式Intent
- ThreadLocal解答
- Consumer与Consumer Group
- 程序插桩-实例
- Android Activity 4种启动模式的详解
- 一道看似很简单的判断A==B问题
- RedHat7.2 如何修改root密码
- Struts2中访问ServletAPI的四种方式
- 数据库char和varchar的区别