版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安卓移动医疗应用开发Android程序设计04Contents.1Activity2BroadcastReceiver3ContentProvider4
Service1.Activity1.1实验内容
Activity是一种应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。本小节主要介绍Activity的创建、跳转、数据交互以及它的生命周期。数据交互跳转生命周期1.Activity1.2实验原理匿名类实验1-创建Activity使用场景:直接通过类(可以是抽象类)或接口名实例化对象new类名或接口名(){
重写方法;};格式:匿名类本质:是继承了类或实现了接口的子类的匿名对象1.Activity1.2实验原理界面布局简介<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="button1"/>
</LinearLayout>实验1-创建Activityxml的版本和编码格式xml的命名空间,有了它就可以按alt+/作为提示排列方式为垂直设置控件的宽度和高度,match_parent属性指和父控件的长度一致,wrap_content属性指空间大小和内容大小刚好为控件设置id值,并且添加到R文件的id内部类中为控件设置文本1.Activity1.2实验原理AndroidManifest配置文件介绍实验1-创建Activity<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="com.leyutek.helloworld"><applicationandroid: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"><activityandroid:name=".MainActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/>
<categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application></manifest>定义程序所在的java包是否允许备份文件:允许注册一个activity,包括页面的名称,.前省略了包名定义应用的图标,引用mipmap中的资源定义应用的名称,引用string中的资源定义应用使用的主题定义应用的圆形图标,引用mipmap中的资源是否支持右对齐righttoleft:是应用程序最先启动该Activity决定应用程序是否显示在程序列表里1.Activity1.3代码分析实验1-创建ActivityActivity文件(逻辑)Layout布局文件(视图)AndroidManifest配置文件加载布局文件通过setContentView()方法注册活动配置主活动1.Activity1.2实验原理实验2-Activity之间的跳转Intent(页面跳转)Intent的介绍:
中文翻译“意图”。是一个消息传递对象,可以用于在不同组件之间传递数据,基本用例包括启动活动、启动服务、传递广播。Intent的分类
显示Intent隐式Intent区别直接指定目标组件的名称不指定具体的目标组件使用方法Intentintent=newIntent(ContextpackageContext,Class<?>cls)定义要执行的action、category、data,通过intent-filter意图过滤器来使用使用场景多用于在应用程序内部传递信息多用于在不同应用程序之间传递消息Intent实现页面跳转
Activity1构建Intent调用startActivity()方法Activity2根据Intent中的描述,执行相应的操作找到满足要求的Activity1.Activity1.2实验原理Context上下文实验2-Activity之间的跳转Context的介绍:
用来访问全局信息的接口,可以理解为上下文、运行环境、场景。比如应用程序的字符串、图片等资源。常用的组件一般继承自Context,目的是为了方便访问资源。Intentintent=newIntent(Context
packageContext,Class<?>cls)Activity1.thisActivity2.class1.Activity1.3代码分析实验2-Activity之间的跳转MainActivity构建Intent调用startActivity()方法SubActivity根据Intent中的描述,执行相应的操作找到满足要求的Activity将Intent传入1.Activity1.2实验原理实验3-Activity之间的数据交互Intent(传递数据)跳转方法:startActivityForResult(Intentintent,intrequestCode)跳转到Intent指定的页面requestCode:请求码,用于标识返回的数据来自于哪个activity回调方法:onActivityResult(intrequestCode,intresultCode,Intentdata)重写该方法,得到传回的数据requestCode:请求码,与跳转方法中的请求码匹配resultCode:结果码,传递成功一般使用RESULT_OKdata:通过Intent获取传回的数据Activity1Activity2使用Intent传递数据:putExtra(Stringname,Stringvalue)传入键值对setResult(intresultCode,Intentdata)设置返回给调用方的结果使用Intent传递数据:getStringExtra(Stringname)根据键名获取对应的值,返回获取的数据值value1.Activity1.3代码分析实验3-Activity之间的数据交互MainActivity构建Intent调用startActivityForResult()方法SubActivityputExtra():传递键值对setResult():设置结果找到满足要求的Activity将Intent传入回调方法:onActivityResult()getStringExtra():根据键值获得对应的数据1.Activity1.2实验原理实验4-Activity的生命周期Activity的生命周期Activity与生命周期有关的方法onCreate():当Activity第一次被创建时调用。onStart():当Activity能够被用户看到时调用。onResume():当Activity能够与用户交互时调用。onPause():当Activity不能与用户交互时调用。onStop():当Activity完全不可见时调用。onDestory():当Activity被销毁时调用。onRestart():当Activity重新被启动(停止状态变为运行状态)时调用。Activity的4种状态运行状态:用户可见,可以交互暂停状态:用户可见,但不能交互停止状态:用户不可见,也不能交互销毁状态:释放内存Activity的3种生存期完整生存期:onCreate()和onDestory()之间。可见生存期:onStart()
和onStop()之间。可见生存期内,活动对于用户可见,有可能与用户无法交互。前台生存期:onResume()
和onPause()之间。前台生存期内,活动处于运行状态,平时接触最多的就是这个状态的活动。1.Activity1.2实验原理实验4-Activity的生命周期设置活动的主题在Manifest配置文件中进行设置引用系统自带的对话框主题<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="com.leyutek.activitytest">
……
<activityandroid:name=".DialogActivity"
android:theme="@style/Theme.AppCompat.Dialog"></activity>
<activityandroid:name=".NormalActivity"></activity></application>
</manifest>1.Activity1.3代码分析实验4-Activity的生命周期类名:MainActivity重写方法:onCreate()onStart()onResume()onPause()onStop()onDestroy()onRestart()NormalActivityDialogActivity2.BroadcastReceiver2.1实验内容
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,而BroadcastReceiver意为“广播接收者”,顾名思义就是对发送出来的Broadcast进行过滤接收并响应的一类组件。本小节将通过一个蓝牙连接的程序来介绍BroadcastReceiver的使用。2.BroadcastReceiver2.2实验原理BroadcastReceiver的创建和注册创建广播接收器注册广播(动态注册的广播接收器一定要取消注册)添加权限(如果需要)广播标准广播有序广播发送广播接收广播操作分类类型分类对于接收者来说,会收到各式各样的广播,所以接收者要自行过滤IntentFilter符合条件的广播接收广播的流程:classDemoBroadcastReceiverextendsBroadcastReceiver{@Override
publicvoidonReceive(Contentcontent,Intentintent){}}创建广播接收器:通过重写onReceive方法创建继承自BroadcastReceiver的类静态注册:在AndroidManifest文件中对BroadcastReceiver进行注册动态注册:调用Context中的registerReceiver对广播进行动态注册,使用unregisterReceiver方法对广播进行取消注册的操作intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);registerReceiver(BroadcastReceiverreceiver,IntentFilterfilter);unregisterReceiver(BroadcastReceiverreceiver);2.BroadcastReceiver2.2实验原理泛型的介绍泛型:是JDK5中引入的特性,其本质是参数化类型,也即将类型由原来具体的类型参数化,在调用时传入具体的类型。参数类型可以用在类、方法、接口中。泛型定义格式:<类型>:指定一种类型的格式。这里的类型可以看成是形参。将来调用时给定的类型可以看成实参,并且实参的类型只能是引用类型。泛型类的定义格式:格式:修饰符class类名<类型>{}范例:publicclassStudent<T>{}此处的T可以为任意标识
2.BroadcastReceiver2.2实验原理ArrayAdapter适配器绑定ListView列表控件Adapter适配器:相当于中间桥梁,用来帮助填充UI控件中的数据。也就是将数据以合适的形式显示到view上给用户看。ArrayAdapter:数组适配器,支持泛型操作,可用于纯文本的显示ArrayAdapter的构造方法:ArrayAdapter(Contextcontext,intresource)context:当前的上下文,不能为nullresource:布局的资源ID,该布局包含一个TextView用于实例化视图2.BroadcastReceiver2.2实验原理ArrayAdapter适配器绑定ListView列表控件ListView列表控件:将内容以列表的形式显示出来,并可以按下列表中的项目触发监听事件绑定和监听操作流程:定义适配器(确定数据显示的样式)定义列表控件绑定:
listView.setAdapter(adapter),通过调用setAdapter方法为ListView设置适配器定义监听事件:实例化AdapterView.onItemClickListener接口,重写onItemClick方法设置列表项目按下监听:listView.setOnItemClickListener(messageClickedHandler)通过适配器给列表添加项目:arrayAdapter.add(“item”);ListView.setAdapter(ArrayAdapter)绑定ArrayAdapter数组适配器调用布局资源确定数据显示样式ListView列表组件引用布局资源用于显示2.BroadcastReceiver2.2实验原理蓝牙简介BluetoothAdapter本地蓝牙适配器,是所有蓝牙交互的入口
通过该类可判断蓝牙状态,扫描蓝牙设备,获取配对设备。BluetoothDevice代表远程蓝牙设备,与某个远程设备建立连接
通过该类可获取远程设备的各种信息,比如:设备名称,设备地址,配对状态等。蓝牙类型特点经典蓝牙泛指支持蓝牙协议4.0以下的模块,一般用于数据量比较大的传输低功耗蓝牙泛指支持蓝牙协议4.0以上的模块,特点是更快和功耗的降低蓝牙通讯流程核心API2.BroadcastReceiver2.3代码分析布局代码:ListView、Button、TextView逻辑代码:
打开蓝牙
扫描蓝牙设备
广播接收器监听蓝牙
列表监听发现蓝牙设备:BluetoothDevice.ACTION_FOUND
扫描完成:BluetoothAdapter.ACTION_DISCOVERY_FINISHED绑定状态改变:BluetoothDevice.ACTION_BOND_STATE_CHANGED蓝牙配对、Toast提示配置文件:
蓝牙权限
位置权限Android6.0(API23)及之后版本需要位置权限3.ContentProvider3.1实验内容
内容提供器(ContentProvider)主要用于不同应用程序之间共享数据,内容提供器属于内容组件之一,通过内容组件可以允许一个程序访问另一个程序中的数据,而且可以选择只共享哪一部分的数据,保证了被访问数据的安全性,目前内容提供器是Android实现跨程序共享数据的标准方式。本小节将通过一个获取本地联系人的程序来介绍内容提供器的使用方法。内容组件内容提供器ContentProvider内容解析器ContentResolver内容观察器ContentObserver访问其他程序中的数据提供外部访问接口实时获取新增的数据3.ContentProvider3.2实验原理运行时权限什么是运行时权限:在软件使用过程中再对某一项权限申请进行授权,安卓6.0系统中加入权限分类普通权限危险权限不会威胁到用户安全和隐私的权限,在软件安装时一次性授权涉及到用户安全和隐私的权限,在软件运行时授权(运行时权限)申请运行时权限API:判断是否授权:ContextCompat.checkSelfPermission(Contextcontext,Stringpermission)
参数1——上下文,参数2——具体权限名
返回值:授权PERMISSION_GRANTED,拒绝PERMISSION_DENIED申请授权:ActivityCompat.requestPermissions(Activityactivity,String[]permissions,intrequestCode)
参数1——Activity实例,参数2——String数组存放申请的权限名,参数3——请求码回调方法:onRequestPermissionsResult(intrequestCode,String[]permissions,int[]grantResults)
参数1——请求码,参数2——请求的权限
参数3——存放授权结果(PERMISSION_GRANTED或PERMISSION_DENIED)勿忘:添加权限声明3.ContentProvider3.2实验原理访问其他程序中的数据概述:访问内容提供器中共享的数据,需要借助ContentResolver类,该类中提供了一系列方法对表中的数据进行增删改查。对于数据的查询,使用Cursor对象获取查询的结果。查询数据:Cursorcursor=getContentResolver().query( uri, projection, selection, selectionArgs, sortOrder);参数1——rui:指定查询某个应用程序下的某一张表参数2——projection:指定查询的列名参数3——selection:指定约束条件参数4——selectionArgs:为占位符提供具体的值参数5——sortOrder:指定查询结果的排序方式Cursor类的方法:Cursor.getString(intcolumnIndex)以字符串形式返回所在列的内容Cursor.getColumnIndex(StringcolumnNam)返回给定列名的从零开始的索引,如果该列不存在,则返回-1Cursor.moveToNext()将光标移到下一行。如果光标已经超过结果集中的最后一个条目,此方法将返回false3.ContentProvider3.3代码分析ListViewButton布局代码:
ListView、Button逻辑代码: ListView绑定列表适配器
授权运行时权限
读取联系人(借助ContentResolver类查询,使用Cursor对象获取查询结果)配置文件:
读取联系人权限申明4.Service4.1实验内容
在AndroidStudio开发中,Service指后台服务,一旦被启动将在后台一直运行。它没有独立的用户界面,主要用于执行某些长期运行的任务。本小节首先介绍与Service相关的线程的使用,然后介绍在子线程中通过Handler更新UI的方法,最后介绍Service的使用流程。线程主线程(UI线程)子线程(工作线程)程序运行时创立,主要负责控制UI界面的显示、更新和控件交互。在后台运行耗时、不需要交互的任务修改界面显示?通过Handler通知主线程更新界面显示Activity的优先级,由高到低:前台进程>可见进程>服务进程>后台进程>空进程当系统内存不足的时候,优先清除优先级低的进程4.Service4.2实验原理Thread创建线程实验1-Thread线程和进程的区别:线程的好处:提高效率进程是资源分配的基本单位,一个正在运行的软件(如微信)就是一个进程线程是程序执行时的最小单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源classDemoThreadextendsThread{@Overridepublicvoidrun(){//执行的任务}}Thread创建线程:定义Thread类的子类,并重写父类的run()方法//实例化线程对象DemoThreadmThread=newConnectThread(device);mThread.start();//启动线程mThread.interrupt();//通过中断结束线程4.Service4.3代码分析实验1-Thread布局代码:
Button逻辑代码:
创建线程(每秒+1显示)
开始线程按键监听
结束线程按键监听4.Service4.2实验原理Handler消息传递机制实验2-Handle新线程HandlerMessageMessageMessageMessageLooperUI线程(主线程)Handler:作用就是发送与处理信息,如果希望Handler正常工作,在当前线程中要有一个Looper对象Message:Handler接收与处理的消息对象,通过what属性传递消息MessageQueue:消息队列,先进先出管理Message,在初始化Looper对象时会创建一个与之关联的MessageQueueLooper:每个线程只能够有一个Looper,管理MessageQueue,不断地从中取出Message分发给对应的Handler处理sendMessage():立即发送消息handleMessage():处理消息,用于被重写4.Service4.3代码分析实验2-Handle布局代码:
Button、TextView逻辑代码:
密码1按键监听(开启线程)
密码2按键监听(开启线程)
创建线程(发送消息)
创建handler类(重写消息处理方法)4.Service4.2实验原理创建服务实验3-Service的应用1publicclassMyServiceextendsService{
@Override
publicIBinderonBind(Intentintent){
//TODO:Returnthecommunicationchanneltotheservice.
thrownewUnsupportedOperationException("Notyetimplemented");
}
@Override
publicvoidonCreate(){
super.onCreate();
Log.d("MyService","onCreateexecuted");
}
@Override
publicintonStartCommand(Intentintent,intflags,intstartId){
Log.d("MyService","onStartCommandexecuted");
returnsuper.onStartCommand(intent,flags,startId);
}
@Override
publicvoidonDestroy(){
super.onDestroy();
Log.d("MyService","onDestroyexecuted");
}
}通过继承Service类来创建服务服务的生命周期与活动交流的媒介服务创建时回调调用startService方法时回调Service被关闭时回调启动服务:startService(Intent)终止服务:stopService(Intent)4.Service4.3代码分析实验3-Service的应用1布局代码:
Button逻辑代码:
创建服务(创建线程:5秒阻塞模拟播放音乐)
开启服务按键监听
关闭服务按键监听4.Service4.2实验原理活动与服务通信:绑定服务实验4-Service的应用2绑定服务:bindService(Intent
service,ServiceConnection
conn,Int
flags
);解绑服务:unbindService(ServiceConnection
conn);//解绑bindService(参数1,参数2,参数3);参数1:intent,定义绑定的服务参数2:ServiceConnection接口,通过这个接口可以接受服务传入的消息参数3:绑定时的操作选项,一般传入BIND_AUTO_CREATTE表示绑定的时候自动创建serviceServiceConnectionconn=newServiceConnection(){
@Override
publicvoidonServiceConnected(ComponentNamename,IBinderservice){
}
@Override
publicvoidonServiceDisconnected(ComponentNamename){
}
};onServiceConnected(参数1,参数2);参数1:ComponentName
,绑定的服务名称参数2:IBinder
,服务的通信通道,可对数据进行读取Step1:
在自定义的Service中继承Binder,实现自己的IBinder对象Step2:
通过onBind()方法返回自己的IBinder对象Step3:
在绑定该Service的类中定义一个ServiceConnection对象,重写两个方法,onServiceConnected和onDisconnected。然后直接读取IBinder传递过来的参数即可。4.Service4.2实验原理活动与服务通信:Binder类传递服务中的数据实验4-Service的应用2publicclassMyServiceextendsService{
@Ov
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脑卒中后遗症症状辨识与康复护理技巧
- 资产评估物品价值的
- 手术室实习同学入科宣教
- 甲亢诊疗与护理技术
- 鼻窦炎急性发作症状分析及护理要点
- 碳资产价值评估
- 眼科疾病症状分析与护理注意事项
- 肠息肉症状识别及护理方法
- 2026 专注力培养体验式教学课件
- 气切病人耐力训练
- 八年级下学期期中家长会课件
- 2026年乡镇高层次人才引进笔试题库与解析
- 46566-2025温室气体管理体系管理手册及全套程序文件
- TCECS 1451-2023 国际建设项目风险管理标准
- 生育保险政策讲解
- 2025年枣庄市中考英语试题(附答案)
- JM1500立式搅拌磨机结构设计 - 副本
- 水务公司笔试题目及答案
- 湖北省历年2004-2013年高考英语试题及答案解析
- 11.2 一元一次不等式(第1课时) 初中数学人教版七年级下册教案
- 2025年高级人工智能训练师(三级)理论考试题库-含答案
评论
0/150
提交评论