博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发学习笔记:浅谈显示Intent和隐式Intent
阅读量:5255 次
发布时间:2019-06-14

本文共 6308 字,大约阅读时间需要 21 分钟。

原创作品,允许转载,转载时请务必以超链接形式标明文章 、作者信息和本声明。否则将追究法律责任。

Intent寻找目标组件的两种方式:

  • 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
  • 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。

一.显式Intent

   一 般情况下,一个Android应用程序中需要多个屏幕,即是多个Activity类,并且在这些Activity之间进行切换通过Intent机制来实现 的。在同一个应用程序中切换Activity时,我们通常都知道要启动的Activity具体是哪一个,因此常用显式的Intent来实现的。

    下 面的例子是在同一应用程序中MainActivity启动SecondActivity,下面的代码中,主要是为“转到SecondActivity”按 钮添加了OnClickListener,使得按钮被点击时执行onClick()方法,onClick()方法中则利用了Intent机制,来启动 SecondActivity,关键的代码是22~25行。

main.xml

1     
2
7
12
18

second.xml

1     
2
7
12
18

MainActivity.java

1     package com.android.test.activity;   2       3     import android.app.Activity;   4     import android.content.Intent;   5     import android.os.Bundle;   6     import android.view.View;   7     import android.view.View.OnClickListener;   8     import android.widget.Button;   9      10     public class MainActivity extends Activity {  11         private Button btn;  12         @Override 13         public void onCreate(Bundle savedInstanceState) {  14             super.onCreate(savedInstanceState);  15             setContentView(R.layout.main);  16               17             btn = (Button)findViewById(R.id.btn);  18             //响应按钮btn事件  19             btn.setOnClickListener(new OnClickListener() {        20                 @Override 21                 public void onClick(View v) {  22                     //显示方式声明Intent,直接启动SecondActivity  23                     Intent it = new Intent(MainActivity.this,SecondActivity.class);  24                     //启动Activity  25                     startActivity(it);            26                 }  27             });  28         }  29     }

SecondActivity.java

1     package com.android.test.activity;   2       3     import android.app.Activity;   4     import android.content.Intent;   5     import android.os.Bundle;   6     import android.view.View;   7     import android.view.View.OnClickListener;   8     import android.widget.Button;   9      10     public class SecondActivity extends Activity {  11         private Button secondBtn;  12         @Override 13         protected void onCreate(Bundle savedInstanceState) {  14             super.onCreate(savedInstanceState);  15             setContentView(R.layout.second);  16               17             secondBtn=(Button)findViewById(R.id.secondBtn);      18             //响应按钮secondBtn事件  19             secondBtn.setOnClickListener(new OnClickListener() {                      20                 @Override 21                 public void onClick(View v) {  22                     //显示方式声明Intent,直接启动MainActivity  23                     Intent intent = new Intent(SecondActivity.this,MainActivity.class);  24                     //启动Activity  25                     startActivity(intent);                26                 }  27             });  28         }  29     }

AndroidManifest.xml清单文件,16~18行为SecondActivity在清单文件里的声明

1     
2
6
7 8
9
11
12
13
14
15
16
18
19
20

效果图:

二.隐式Intent

   下面是同一应用程序中的Activity切换的例子,需要AndroidManifest.xml中增加Activity的声明,并设置对应的Intent Filter和Action,才能被Android的应用程序框架所匹配。

MainActivity.java

 

1     package com.android.change.activity;   2       3     import android.app.Activity;   4     import android.content.Intent;   5     import android.os.Bundle;   6     import android.view.View;   7     import android.view.View.OnClickListener;   8     import android.widget.Button;   9      10     public class MainActivity extends Activity {  11         private Button btn;  12      13         @Override 14         public void onCreate(Bundle savedInstanceState) {  15             super.onCreate(savedInstanceState);  16             setContentView(R.layout.main);  17      18             btn = (Button) findViewById(R.id.btn);  19             // 响应按钮btn事件  20             btn.setOnClickListener(new OnClickListener() {  21                 @Override 22                 public void onClick(View v) {  23                     // 实例化Intent  24                     Intent it = new Intent();  25                     //设置Intent的Action属性  26                     it.setAction("com.android.activity.MY_ACTION");  27                     // 启动Activity  28                     startActivity(it);   29                 }  30           });    31         }  32     }

 

SecondActivity.java

1     package com.android.change.activity;   2       3     import android.app.Activity;   4     import android.os.Bundle;   5       6     public class SecondActivity extends Activity {   7       8         @Override  9         protected void onCreate(Bundle savedInstanceState) {  10             super.onCreate(savedInstanceState);  11             setContentView(R.layout.second);  12         }  13     }

main.xml

1     
2
7
11
17

seond.xml

1     
2
7
12

AndroidManifest.xml 文件的18,19行修改了Intent Filter,这样SecondActivity才能够接收到MainActivity发送的Intent。因为在MainActivity的 Intent发送的动作为"com.android.activity.MY_ACTION",而在18行里,SecondActivity设置的 Action也为"com.android.activity.MY_ACTION",这样就能进行匹配。

 

1     
2
6
7 8
9
11
12
13
14
15
16
17
18
19
20
21
22
23

 

效果图:

 

    对 于显示Intent,Android不需要再去做解析,因为目标组件很明确。Android需要解析的是隐式Intent,通过解析,将Intent映射 给可以处理该Intent的Activity,Service等。Intent的解析机制主要是通过查找已经注册在 AndroidManifest.xml中的所有IntentFilter以及其中定义的Intent,最终找到匹配的Intent。

本文出自 “” 博客,请务必保留此出处

 

转载于:https://www.cnblogs.com/xuyinghui/p/4959849.html

你可能感兴趣的文章
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>
tju 1782. The jackpot
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>