Android组件--意图(Intent)
2024-10-01 14:41:30
1. 隐示调用和显示调用
参考资料:http://blog.csdn.net/harvic880925/article/details/38399723
1.概念
1). 显式意图:
能从intent上直观的看到跳转到哪一个界面
优劣:直接跳转,效率高
应用场景: 一般是自己内部跳转的时候
2). 隐式意图:
要指定action(动作) 、data(数据) 来达到跳转的目的,系统通过给定的action/data等在注册里去查找。
优劣:因为有查找过程,效率低下
应用场景:一般是跳转到其他应用中的某个界面,或者自己的应用界面想被其他应用打开。
2、intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data。
理论上来说,如果intent不指定category,那么无论intent filter的内容是什么都应该是匹配的。但是,如果是隐式intent,android默认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,如果你的 activity支持接收implicit intent的话就一定要在intent filter中加入android.intent.category.DEFAULT。
3. 概念
acyivity
<intent-filter>
//注册一个自定义,当有人用到时new Intent去创建一个这个action然后调用
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
BroadcastReceiver
<receiver android:name=".MyReceiver">
<intent-filter>
//系统发送广播,也会new intent去创建这个action,然后调用
<action android:name="android.intent.action.MEDIA_MOUNTED"></action>
<data android:scheme="file"></data>
</intent-filter>
</receiver>
2.代码
manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="sample.android_serialport_api.adapter"> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--一个activity组件-->
<activity android:name=".MainActivity">
<!--意图过滤器-->
<intent-filter>
<!--action:行为;MAIN就是一开始进入main函数-->
<action android:name="android.intent.action.MAIN" />
<!--cateory:类别;LAUNCHER就是新建立一个图标-->
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <!--注册第二个界面:什么都没填写,表示只是进行了注册,通过显示意图intent调用-->
<activity android:name=".SecondActivity"></activity>
<!--注册第三个界面:加入了意图intent:表示通过隐示意图intent来调用-->
<activity android:name=".ThirdActivity">
<!--意图过滤器-->
<intent-filter>
<!--意图行为:相当于一个ID,是唯一的标识。当只有有intent的action行为为这个name的时候
,系统就会去注册中找有没有对应的,如果有,则会调用。不过这里一般为包名-->
<action android:name="aplex hahah test"/>
<!--如果为隐示意图,必须要设置cateory为DEFAULT,否则报错-->
<category android:name="android.intent.category.DEFAULT"/>
<!--还可以写一个data;-->
<!--<data android:xxx=""/>-->
</intent-filter>>
</activity>
</application> </manifest>
MainActivity.java
public class MainActivity extends AppCompatActivity {
//显示调用的
Button bt1;
//隐示调用的
Button bt2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1 = findViewById(R.id.bt1);
bt2 = findViewById(R.id.bt2); bt1.setOnClickListener(new View.OnClickListener(){
public void onClick(View var1){
//显示Intent
Intent it1 =new Intent(MainActivity.this, SecondActivity.class);
startActivity(it1);
}
});
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it2 = new Intent();
it2.setAction("aplex hahah test");
it2.addCategory("android.intent.category.DEFAULT");
startActivity(it2);
}
});
}
}
SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second); }
}
ThirdActivity.java
public class ThirdActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third); }
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="sample.android_serialport_api.adapter.MainActivity"> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bt1"
android:text="第一界面;Intent显示调用"/> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bt2"
android:text="第二界面;Intent隐示调用"/> </LinearLayout>
效果:
2. 传递数据(没看,用到再说)
最新文章
- 移动端城市选择JavaScript插件(基于WG的城市选择插件的修改版本)
- MySQL 半同步复制+MMM架构
- 在线考试系统(Online Exam System)--ASP.NET
- CSS3特性 盒模型 动画
- ResponsiveSlides.js 幻灯片实例演示
- [部署]CentOS安装apache
- SimpleDataFormat格式
- UML和模式应用
- C#代码分层的好处
- 使用AsyncTask实现图片加载
- 编译安装apache2.4
- Google机器学习教程心得(二)决策树与可视化
- MyBatis和SpringMVC集成事务在Junit测试下有效但是在实际项目无效的问题
- C#进阶系列——使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
- Python基础综合练习
- VBScript.RegExp 正则表达式excel vba 学习经验
- [Java] Create File with java.io.File class
- ArcGIS 10——版本编辑流程
- fragment Activity之间传值的方法 之------------接口回调
- 【SVN】centos环境下搭建SVN服务器
热门文章
- vs2008安装mvc3后新建项目报错 -- 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
- Kafka与.net core(一)安装
- 管道/FIFO注意事项
- openstack kolla 部署---不同的节点采用不同的物理接口
- 正则表达式的Wed验证应用(40)
- Spring-初识Spring框架-IOC控制反转(DI依赖注入)
- BZOJ4012 [HNOI2015]开店 (动态点分治)
- Linux 历史信息history显示执行时间
- jpetStore 学习总结(1)
- 洛谷 P4774 / loj 2721 [NOI2018] 屠龙勇士 题解【同余】【exgcd】【CRT】