安卓-Activity-广播接收者的使用

上传人:沈*** 文档编号:161567411 上传时间:2022-10-14 格式:DOC 页数:24 大小:679KB
收藏 版权申诉 举报 下载
安卓-Activity-广播接收者的使用_第1页
第1页 / 共24页
安卓-Activity-广播接收者的使用_第2页
第2页 / 共24页
安卓-Activity-广播接收者的使用_第3页
第3页 / 共24页
资源描述:

《安卓-Activity-广播接收者的使用》由会员分享,可在线阅读,更多相关《安卓-Activity-广播接收者的使用(24页珍藏版)》请在装配图网上搜索。

1、显示意图创建Activity定义Activity 定义类继承Activity 在AndroidManifest.xml的节点中声明显式意图创建方式 构造函数,代码少new Intent(this, NewActivity.class); 类名形式,启动同一个项目中的Activity,灵活,可扩展性强intent.setClassName(this, cn.itcast.activity.NewActivity); 包名类名形式,可启动其他程序中的Activityintent.setClassName(cn.itcast.downloader, cn.itcast.downloader.Main

2、Activity);隐式意图创建Activity 显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件 在清单文件中定义时需要定义才能被隐式意图启动 中至少配置一个和一个,否则无法被启动 Intent对象中设置的action、category、data在必须全部包含才能启动 中的、都可以配置多个,Intent对象中不用全部匹配,每样匹配一个即可启动 如果一个意图可以匹配多个Activity,Android系统会提示选择自定义隐式意图:1、创建一个OtherActivity,这个名字可以随意取名 这个必须要有,因为 ,如果不加就匹配不成功了2、开启这个意

3、图: Intent intent = new Intent();intent.setAction();/intent.addCategory(Intent.CATEGORY_DEFAULT);/系统会自动加上这一句startActivity(intent);多个Activity可以拦截相同的Action,如:1、定义 2、使用Intent intent = new Intent();intent.setAction(Intent.ACTION_CALL);intent.setData(Uri.parse(tel:18701585499);startActivity(intent);因为的Act

4、ivity拦截的Action、Category、Data等和拨打电话的一样,所以在启动上面的意图时会启动一个界面让我们选择用哪个Activity,如:一个Activity可以拦截多个Action中的、都可以配置多个,Intent对象中不用全部匹配,每样匹配一个即可启动 Intent intent = new Intent();intent.setAction(Intent.ACTION_CALL);intent.setData(Uri.parse(heima:黑马9期);startActivity(intent);这里启动就意图就不会被电话那个Activity所拦截了,因为设置的Data不一样

5、。使用隐式意图可以打开各种资源Intent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.setData(Uri.parse();startActivity(intent);如:这样就启动浏览器打开百度的网站了,如果我们想做一个浏览器也能这样被打开就可以配置Activity中的Action、Data和上面代码的一样即可。 Uri data = Uri.fromFile( new File(/mnt/sdcard/s10392227.jpg) );String type = image/*; /接受所有的图片

6、Intent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.setDataAndType(data, type);/设置数据和类型startActivity(intent);使用意图打开一张图片:配置可以拦截上面的意图的Activity: 旧Activity传数据到新ActivityIntent intent = new Intent(this,OtherActivity.class); intent.putExtra(name, 戴振良); intent.putExtra(age, 25);startAct

7、ivity(intent); 在意图对象中封装了一个Bundle对象,可以用来携带数据,这个Bundle相当于Map集合,用来存储键值对的。putExtra()有很多的重载方法: 在新Activity中可以获得意图对象以获取其中Bundle保存的数据Intent intent = getIntent();String name = intent.getStringExtra(name);/如果获取不到默认为nullint age = intent.getIntExtra(age, -2);/如果获取不到默认为-2System.out.println(name+:+age);Intent中可以放

8、一个Bunlder对象,然后取Bunler对象:1、放数据Bundle bundle = new Bundle(); bundle.putString(name, 戴振良); bundle.putInt(age, 25); Intent intent = new Intent(this,OtherActivity.class); intent.putExtras(bundle);startActivity(intent);2、取数据Intent intent = getIntent();Bundle bundle = intent.getExtras();String name = bundl

9、e.getString(name);/如果获取不到默认为nullint age = bundle.getInt(age);/如果获取不到默认为0System.out.println(name+:+age);Intent中还可以放一个序列化过的对象放:取:新Activity传数据到旧Activity 使用startActivityForResult(Intent intent, int requestCode) 方法打开Activity 重写onActivityResult(int requestCode, int resultCode, Intent data) 方法 新Activity中调用

10、setResult(int resultCode, Intent data) 设置返回数据之后,关闭Activity就会调用onActivityResult方法旧Activitypublic void click(View view) Intent intent = new Intent(this,OtherActivity.class); startActivityForResult(intent, 100); protected void onActivityResult(int requestCode, int resultCode, Intent data) 这个意图开启然后返回后就会

11、执行这个方法新ActivityIntent data = getIntent();data.putExtra(login, 登陆成功!);int resultCode = 300; setResult(resultCode, data);Activity生命周期 Acitivity三种状态运行:activity在最前端运行暂停:activity可见,但前端还有其他activity,被覆盖一部分,或者前端activity透明停止:activity不可见,完全被覆盖,按返回键退出时,不属于停止状态,退出就是被销毁了,没有状态可言按Home键的时候是后台进运了,属于停止状态 生命周期相关方法(7个,

12、创建-销毁 开始-停止 暂停-继续(onResume) 从新开始(onRestart) onCreate:创建时调用,或者程序在暂停、停止状态下被杀死之后重新打开时也会调用onStart:onCreate之后或者从停止状态恢复时调用onResume:onStart之后或者从暂停状态恢复时调用,从停止状态恢复时由于调用onStart,也会调用onResumeonPause:进入暂停、停止状态,或者销毁时会调用onStop:进入停止状态,或者销毁时会调用onDestroy:销毁时调用onRestart:从停止状态恢复时调用暂停状态停止状态运行状态通过这张图,可以看到从暂停状态恢复到运行状态会调用o

13、nResume()方法 从停止状态恢复到运行状态会调用onRestart()、onStart()、onResume()三个方法 从运行状态到暂停状态会调用onPause()方法 从运行状态到停止状态会调用onPause()、onStop()两个方法注:当屏幕方向改变时会顺序调用这些方法:,这时就可以用下面的方法保存数据了onSaveInstanceState:在Activity被动的摧毁或停止的时候调用,用于保存运行数据,可以将数据存在在Bundle中onRestoreInstanceState:该方法在Activity被重新绘制的时候调用,例如改变屏幕方向,savedInstanceStat

14、e为onSaveInstanceState保存的数据当切换屏幕时的执行方法顺序:注:按返回键退出,或者正常退出时Activity会被销毁,但是不会执行onSaveInstanceState()方法正常启动Activity时也不会执行onRestoreInstanceState()方法按Home键时会执行: 然后再按Home恢复时会执行:当Activity处于停止状态时会执行:、有时候切换屏幕时不想让Activity销毁,可样这样做,配置清单的如下属性:配置好后,则在这个Activity界面中进行屏幕切换时就不会执行这些方法这时,只执行下面的这个方法:Activity的启动模式 在Android

15、Manifest.xml中的标签中可以配置android:launchMode属性,用来控制Actvity的启动模式 在Android系统中我们创建的Acitivity是以栈的形式呈现的standard:每次调用startActivity()启动时都会创建一个新的Activity放在栈顶(原来的Activity不会销毁)singleTop:如果启动的Activity时,指定Activity不在栈顶就创建(原来的Activity不会销毁),如在栈顶,则不再创建singleTask:如果启动的Activity不存在就创建,如果存在直接跳转到指定的Activity所在位置(即把它上面的所有Activ

16、ity销毁掉)singleInstance:如果启动的Activity不存在就创建,如果存在就将指定的Activity移动到栈顶Activity的内存管理 Android系统在运行多个进程时,如果系统资源不足,会强制结束一些进程。优先选择哪个进程来结束是有优先级的。以下顺序靠上的优先结束空:进程中所有Activity都已销毁(Activity销毁时,在进程里的进程还在,但是已经是一个空进程了)后台:进程中有一个停止状态的Activity可见:进程中有一个暂停状态的Activity前台:进程中正在运行一个Activity在内存不足是销毁进程的顺序为:空、后台、可见、前台,后面两种进程一般很少会因

17、为内容不足而被销毁。因为把空、后台进程都销毁后就剩下可见和后台的进程了,而这些进程一般没几个,占不了多少内存定义广播接收者 定义类继承BroadcastReceiver,重写onReceive方法 当接收到匹配广播之后就会执行onReceive方法 清单文件中声明,需要在其中配置指定接收广播的动作和类型 BroadcastReceiver除了在清单文件中声明,也可以在代码中声明,使用registerReceiver方法注册Receiver查看系统的意图进入Intent的源代码,按Ctrl+O,可查看所有的系统意图,如:配置接收者接收哪些广播在AndroidMenafest清单中配置的广播接收者

18、如上面监听了短信的接收(注,记得加权限)在Activity中配置的广播接收者通过这种方式配置的Receiver要注册到Activity中才能接收到广播。设置接收哪个广播filter.setPriority(2);/设置优先级在Activity不在最前面或退出的时候可以解除Receiver的注册,否则在退出Activity的时候会报错,因为这个广播接收者是注册在Activity中,Activity都不存在了,广播接收者就没有了依赖了。查看广播接收者的文档:把鼠标移到广播接收者的类上:发送无序广播: 被所有广播接收者接收,无序,不可中断 广播时可设置接收者权限,仅当接收者含有权限才能接收 接收者的

19、也可设置发送方权限,只接收含有权限应用的广播设置接收者在拦截到这个Action时到才能收到这个广播自定义权限:这个名字可以随意取名指定一个广播接收着,不管其它接收者有没有终断广播它都一定会收到广播发送有序广播:可以传送数据获取有序广播中的数据:修改有序广播中的数据指定接收者接收广播的顺序值大的先收到广播终止广播:监听短信接收 Android系统在收到短信的时候会发送一条有序广播,我们如果定义一个接收者接收这个广播,就可以得到短信内容,也可以拦截短信 定义广播接收者接收广播android.provider.Telephony.SMS_RECEIVED 在onReceive方法内部调用Intent

20、的getExtras()再调用get(String)获取其中pdus字段,得到一个Object,其中每一个元素都是一个byte 通过SmsMessage类的createFromPdu方法创建SmsMessage对象 从SmsMessage对象中即可获取发送者号码、短信内容、发送时间等信息 需要接收短信权限: Android系统中收到短信的通知是一个有序通知,我们如需拦截垃圾短信,可以配置较高的priority,收到信息进行判断是否abortBroadcast()Android中默认的短信接收者的优先级为0,所以只有我们定义的接收者优先级大于0,就可以先收到短信,然后可以控制是否中断这个广播。核

21、心代码如下:监听呼出电话 定义广播接收者接收 android.intent.action.NEW_OUTGOING_CALL 需要权限 在onReceive方法中使用getResultData() 和 setResultData() 方法获取和设置电话号码生命周期 广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁(注:程序一运行,就会有一个东东自动监听 广播(即便程序退出了这个东东依然存在并一直在监听广播),一有收到有程序所需要的广播即创建广播接收者并调用onReceive()方法,该方 法的代码执行完后,广播接收者即销毁了,而自动监听广播的那个东东依然存在,依然在监听广播。 广播接收者中的代码也是在Activity的主线程中运行的,广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框 最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉。一个进程中可以包含多个线程,进程没了,它里面的所有线程也都没了。 耗时的较长的工作最好放在服务中完成

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!