第八章intent和broadcast面对面
Android学习笔记九之Intent

Android学习笔记九之IntentIntent简介前面我们介绍完Android系统的四大组件:Activity、Service、ContentProvider、BroadCastReceiver,现在,我们来介绍他们之间的联系枢纽————IntentIntent,意思是“意图”,Intent是Android系统提供的用于应用之间或应用内部Activity、Service、BroadCastReceiver之间进行交互的一种机制。
Intent在程序运行时连接不同的组件,我们可以通过Intent向Android系统发出请求,Android系统会根据请求选择合适的组件进行响应。
(ContentProvider本身就是一种通信机制,不需要通过Intent通信)如果AActivity想要向BActivity或者Android系统的其他组件传递参数,或者启动其他组件,不需要直接联系,通过Intent作为桥梁,简单的说就是,用Intent来作为中介联系其他组件。
例如可以通过下面这几种方法传递Intent实现启动Activity、启动Service或者绑定Service,发送广播启动Activity:Context.startActivity()或者调用Activity.startActivityForResult()启动Service或者绑定Service:Context.startService(),调用Context.bindService()来绑定一个service对象发送广播:Context.sendBroadcast(),Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()Intent有两种:显式Intent和隐式Intent。
显式Intent通过具体的组件名去启动组件,一次只能启动一个组件;隐式Intent不指定具体的组件名,而是指定Intent的Action、category 等信息,交给Android系统去分析这个Intent,并帮我们选择合适的组件去启动,当有多个组件符合的时候,显示所有分组件给我们选择。
Android中的广播(BroadCast)详细介绍

Android中的⼴播(BroadCast)详细介绍什么是⼴播在Android中,Broadcast是⼀种⼴泛运⽤的在应⽤程序之间传输信息的机制。
我们拿⼴播电台来做个⽐⽅。
我们平常使⽤收⾳机收⾳是这样的:许许多多不同的⼴播电台通过特定的频率来发送他们的内容,⽽我们⽤户只需要将频率调成和⼴播电台的⼀样就可以收听他们的内容了。
Android中的⼴播机制就和这个差不多的道理。
电台发送的内容是语⾳,⽽在Android中我们要发送的⼴播内容是⼀个Intent。
这个Intent中可以携带我们要传送的数据。
电台通过⼤功率的发射器发送内容,⽽在Android中则是通过sendBroadcast这个⽅法来发送(很形象的名字吧)。
⽤户通过调整到具体的电台频率接受电台的内容。
⽽在Android中要接受⼴播中的内容则是通过注册⼀个BroadCastReceiver 来接收的。
只有发送⼴播的action和接收⼴播的action相同,接受者才能接受这个⼴播。
⼴播有什么⽤其实,在什么是⼴播的第⼀句就已经说明了⼴播有什么⽤了。
对了,笼统⼀点讲就是⽤来传输数据的。
具体⼀点说就是:1.实现了不同的程序之间的数据传输与共享,因为只要是和发送⼴播的action相同的接受者都能接受这个⼴播。
典型的应⽤就是android⾃带的短信,电话等等⼴播,只要我们实现了他们的action的⼴播,那么我们就能接收他们的数据了,以便做出⼀些处理。
⽐如说拦截系统短信,拦截骚扰电话等等 2.起到了⼀个通知的作⽤,⽐如在service中要通知主程序,更新主程序的UI等。
因为service是没有界⾯的,所以不能直接获得主程序中的控件,这样我们就只能在主程序中实现⼀个⼴播接受者专门⽤来接受service发过来的数据和通知了。
实现⼴播现在我们就来实现⼀个简单的⼴播程序。
Android提供了两种注册⼴播接受者的形式,分别是在程序中动态注册和在xml中指定。
他们之间的区别就是作⽤的范围不同,程序动态注册的接收者只在程序运⾏过程中有效,⽽在xml注册的接收者不管你的程序有没有启动有会起作⽤。
安卓面试题及答案详解版

安卓面试题及答案详解版1. 问题:什么是Android操作系统?答案: Android操作系统是一种基于Linux内核的开源操作系统,主要用于触屏移动设备,如智能手机和平板电脑。
它由Google公司开发并发布,允许设备制造商和开发者自由地修改和分发。
2. 问题:请解释Android的架构。
答案: Android架构从下到上分为四个层次:- 应用层:包含用户界面和应用程序。
- 应用框架层:提供应用程序开发接口(API)。
- 运行时环境层:包括Android核心库和Android运行时环境。
- Linux内核层:提供底层的硬件抽象层、内存管理、进程管理等功能。
3. 问题: Android应用是如何打包的?答案: Android应用通常使用APK(Android Package)格式进行打包。
APK文件是一个压缩文件,包含应用的代码、资源、资产、库和AndroidManifest.xml文件。
4. 问题:什么是Activity?答案: Activity是Android应用程序中的基本构建块,用于定义用户界面和用户交互。
每个Activity都是一个独立的屏幕,用户可以与之交互。
5. 问题:请解释Intent的概念。
答案: Intent是Android中用于请求操作的抽象描述符。
它可以用于启动Activity、启动服务或广播信息。
Intent可以显式地指定目标组件,也可以隐式地通过Intent Filter来匹配。
6. 问题:如何在Android中处理网络请求?答案:在Android中处理网络请求通常使用HTTP客户端库,如OkHttp或Retrofit。
这些库提供了简化的API来发送HTTP请求和接收响应。
7. 问题:解释Android中的Context对象。
答案: Context是Android中一个非常关键的类,它允许访问应用程序环境的全局信息。
Context可以用于启动Activity、获取资源、启动服务等。
Intent使用详解

Android Intent 使用整理在一个Android应用中,主要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent协助完成。
正如网上一些人解析所说,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
Intent在这里起着实现调用者与被调用者之间的解耦作用。
Intent传递过程中,要找到目标消费者(另一个Activity,IntentReceiver或Service),也就是Intent的响应者,有两种方法来匹配:1,显示匹配(Explicit):public TestB extents Activity{.........};public class Test extends Activity{......public void switchActivity(){Intent i = new Intent(Test.this, TestB.class);this.startActivity(i);}}代码简洁明了,执行了switchActivity()函数,就会马上跳转到名为TestB的Activity中。
2,隐式匹配(Implicit):隐式匹配,首先要匹配Intent的几项值:Action, Category, Data/Type,Component 如果填写了Componet就是上例中的Test.class)这就形成了显示匹配。
所以此部分只讲前几种匹配。
匹配规则为最大匹配规则,1,如果你填写了Action,如果有一个程序的Manifest.xml中的某一个Activity的IntentFilter段中定义了包含了相同的Action那么这个Intent就与这个目标Action匹配,如果这个Filter段中没有定义Type,Category,那么这个Activity就匹配了。
第8章 Activity和Intent(多个Activity之间的跳转)以及Activity的生命周期

1. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("")); 2. startActivity(intent);
Intent的动作是Intent.ACTION_VIEW,根据URI 的数据类型来匹配动作 数据部分的URI是Web地址,使用 Uri.parse(urlString)方法,可以简单的把一个字符 串解释成Uri对象.对以Uri方式传送的数据,根据 Uri协议部分以最佳方式启动相应的Activity进行处 理。对于http:address将打开浏览器查看;对于 tel:address将打开拨号呼叫指定的电话号码
一个Intent对象包含一组信息:
Component name:要处理这个Intent对象的组件名 Action:Intent要完成的动作 Data:执行动作的 URI和MIME类型,不同的动作有不同的数 如果我们在启动一个 Activity 时使用这样的 据规格。 Intent 对象: Category:类别,为执行动作的附加信息,提供了额外的信 Intent intent =new Intent(); 息,有关于能够处理这个 Intent对象的组件种类。 intent.setAction("com.ultrawise.myaction"); Extras:附加信息 那么所有的 Action 列表中包含了 Flags:很多是用来指定 Android系统如何启动 activity ,还有 “com.ultrawise.myaction ”的 Activity 都将会匹 启动了activity 后如何对待它。 配成功。
隐式启动Activity
在AndroidManifest.xml文件里
2023年职场_android面试题及答案

2023年android面试题及答案2023年android面试题及答案篇一1. 横竖屏切换时候 activity 的生命周期1). 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏时会执行两次 .2). 设置 Activity 的 Android:configChanges=‖orientation‖时 , 切屏还是会重新调用各个生命周期 , 切横、竖屏时只会执行一次 .3). 设置 Activity 的 Android:configChanges=‖orientation|keyboardHidden‖时 , 切屏不会重新调用各个生命周期 , 只会执行 onConfigurationChanged 方法 .2.android 中的动画有哪几类,它们的特点和区别是什么 ?两种,一种是 Tween 动画、还有一种是 Frame 动画。
Tween 动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化 ; 另一种Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
3. 一条最长的短信息约占多少 byte?中文70( 包括标点) ,英文160 ,160 个字节。
4.handler 机制的原理andriod 提供了 Handler 和 Looper 来满足线程间的通信。
Handler 先进先出原则。
Looper 类用来管理特定线程内对象之间的消息交换 (Message Exchange) 。
1)Looper: 一个线程可以产生一个 Looper 对象,由它来管理此线程里的Message Queue( 消息队列 ) 。
2)Handler: 你可以构造 Handler 对象来与 Looper 沟通,以便 push 新消息到 Message Queue 里; 或者接收 Looper 从 Message Queue 取出 ) 所送来的消息。
Android学习笔记08_BroadcastReceiver

BroadcastReceiver广播事件处理机制,和事件处理机制类似,只不过事件处理机制是程序组件级别的,而广播事件处理机制是系统级别的。
发送方不关心接收方是否接收这些数据,也不关心接收方如何处理这些数据,如何处理数据由接收方决定。
BroadcastReceiver用于监听被广播的事件(Intent)为了达到这个目的,BroadcastReceiver必须进行注册,注册的方法有以下两种:1、在应用程序的代码中进行注册(只有程序在执行状态才能接收到广播事件)2、在AndroidManifest.xml中进行注册(即使应用程序已经被关闭,仍然可以接收到广播事件)自定义Broadcase Receiver1.创建Intent,发出广播声明一个字符串定义广播ACTIONprivate static final String MY_ACTION = "jimmy.action.MY_ACTION";创建Intent对象,设置其Action属性和Extra属性,使用该Intent发出广播Intent intent = new Intent();intent.setAction(MY_ACTION);intent.putExtra("msg", "这是我自己定义的广播");sendBroadcast(intent);2.定义一个MyReceiver类该类继承BroadcastReceiver类,复写onReceive()方法接收广播,并显示信息public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context cxt, Intent intent) {// TODO Auto-generated method stubString msg = intent.getStringExtra("msg");Toast.makeText(cxt, msg, Toast.LENGTH_LONG).show();}}3.在AndroidManifest.xml配置文件中声明广播接收组件<receiver android:name=".MyReceiver"><intent-filter><action android:name="jimmy.action.MY_ACTION"></action></intent-filter></receiver>系统Broadcase Receiver1.标准广播Action,这些广播是系统自动发出的,我们直接定义事件接收器进行接收就可以使用系统消息了。
Intent深入详解课件

的Activity。
动。开发者可以通过设 ComponentName,或
置不同的Intent标志
者使用setClass()方法通
(如
过类名来指定。
FLAG_ACTIVITY_NEW_
TASK)来影响系统选择。
THANKS FOR WATCHING
感谢您的观看
通过setData()方法设置Intent携带 的数据,如URI或文件路径。
设置Intent动作
通过setAction()方法设置Intent的动 作,如打开网页、发送邮件等。
返回结果给调用者
setResult()方法
在目标组件中调用此方法,将结果数据和结果码传递回调用者。
onActivityResult()方法
附加数据(Extras)
总结词
提供额外的信息或参数。
详细描述
附加数据是Intent中用于传递额外信息的键值对集合。这些键值对可以是任何类型的数据,如字符串、整数、布 尔值等。附加数据提供了更灵活的方式来传递参数或信息给目标组件。
类别(Categories)
总结词
对Intent进行分类或标记。
详细描述
隐式启动
隐式启动是指不指定要启动的组件的 名称,而是通过指定Intent的动作、 类别和数据来让系统自动匹配可响应 的组件。
启动其他应用组件
启动Activity
通过Intent可以启动一个Activity,这是最常见的组件之一,用于实现用户界面交互。
启动Service
Service是一种在后台执行长时间运行操作的组件,不提供用户界面。通过Intent可以启 动一个Service来执行后台任务。
对于文件、图片等大 块数据,建议使用 ContentProvider或 文件共享等方式进行 传递,而不是通过 Intent。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Bundle类的作用
Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它 提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(), putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。Bundle的内 部实际上是使用了HashMap<String, Object>类型的变量来存放putXxx()方法放入的值:
在调用Bundle对象的getXxx()方法时,方法内部会从该变量中获取数据,然后对数据进行类型转 换,转换成什么类型由方法的Xxx决定,getXxx()方法会把转换后的值返回。
北京传智播客教育
为Intent附加数据的两种写法
第一种写法,用于批量添加数据到Intent:
public final class Bundle implements Parcelable, Cloneable { ...... Map<String, Object> mMap; public Bundle() { mMap = new HashMap<String, Object>(); ...... } public void putString(String key, String value) { mMap.put(key, value); } public String getString(String key) { Object o = mMap.get(key); return (String) o; ........//类型转换失败后会返回null,这里省略了类型转换失败后的处理代码 } }
第二种写法:只不过这种写法是把数据一个个地添加进Intent,使用起来比较方 便,而且只要编写少量的代码。
Intent intent = new Intent(); intent.putExtra("name", "传智播客");
Intent提供了各种常用类型重载后的putExtra()方法,如: putExtra(String name, String value)、 putExtra(String name, long value),在putExtra()方法内部会判断当前Intent对象内部是否已经存在一个Bundle对象,如果不存在 就会新建Bundle对象,以后调用putExtra()方法传入的值都会存放于该Bundle对象,下面是Intent的 putExtra(String name, String value)方法代码片断: public class Intent implements Parcelable { private Bundle mExtras;
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="/apk/res/android" package="edu.hrbeu.IntentDemo" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".IntentDemo" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="UNCHER" />
Android应用程序中,用户使用的每个组件都必须在 AndroidManifest.xml文件中的<application>节点内定义 <application>节点下共有两个<activity>节点,分别代表 应用程序中所使用的两个Activity,IntentDemo和 ActivityToStart
打开新的Activity,并传递若干个参数给它
第二种:打开新的Activity,并传递若干个参数给它: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { ....... button.setOnClickListener(new View.OnClickListener(){//点击该按钮会打开一个新的Activity public void onClick(View v) { Intent intent = new Intent(MainActivity.this, NewActivity.class) Bundle bundle = new Bundle();//该类用作携带数据 bundle.putString("name", "传智播客"); bundle.putInt("age", 4); intent.putExtras(bundle);//附带上额外的数据 startActivity(intent); }}); } } 在新的Activity中接收前面Activity传递过来的参数: public class NewActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { ........ Bundle bundle = this.getIntent().getExtras(); String name = bundle.getString("name"); int age = bundle.getInt("age"); } 北京传智播客教育 }
Байду номын сангаас
Intent intent = new Intent(IntentDemo.this, ActivityToStart.class); startActivity(intent);
} });
在点击事件的处理函数中,Intent构造函数的第1个参数是应用程序上下文 ,程序中的应用程序上下文就是IntentDemo;第2个参数是接收Intent的目 标组件,使用的是显式启动方式,直接指明了需要启动的Activity
5.1.1 启动Activity 显式启动
使用Intent显式启动Activity 创建一个Intent 指定当前的应用程序上下文以及要启动的Activity 把创建好的这个Intent作为参数传递给startActivity()方法
1. Intent intent = new Intent(IntentDemo.this, ActivityToStart.class); 2. startActivity(intent);
5.1.1 启动Activity 显式启动
点击“启动Activity”按钮后,程序启动ActivityToStart 这个Activity
5.1.1 启动Activity 显式启动
在AndroidManifest.xml文件中注册上面这两个Activity, 应使用<activity>标签,嵌套在<application>标签内部
1.5Android 模拟器
5.1.1 启动Activity
</activity>
显式启动
14. <activity android:name=".ActivityToStart" 15. android:label="@string/app_name"> 16. </activity> 17. </application> 18. <uses-sdk android:minSdkVersion="3" /> 19. </manifest>
5.1.1 启动Activity
显式启动 在IntentDemo.java文件中,包含了显示使用Intent启动Activity的核心代码
Button button = (Button)findViewById(R.id.btn); button.setOnClickListener(new OnClickListener(){ public void onClick(View view){
public Intent putExtra(String name, String value) { if (mExtras == null) { mExtras = new Bundle(); } mExtras.putString(name, value); return this; }
北京传智播客教育
第5章 Intent
课程目标
了解使用Intent进行组件通信的原理 掌握使用Intent启动Activity的方法
掌握获取Activity返回值的方法
了解Intent过滤器的原理与匹配机制 掌握发送和接收广播消息的方法
5.1 Intent
Intent是一个动作的完整描述,包含了动作的产生组件、接 收组件和传递的数据信息 Intent也可称为一个在不同组件之间传递的消息,这个消 息在到达接收组件后,接收组件会执行相关的动作 Intent为Activity、Service和BroadcastReceiver等组件提供 交互能力 Intent的用途