当前位置: 网学 > 编程文档 > Android > 正文

android笔记

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:网学会员,鉴于大家对android笔记十分关注,会员在此为大家搜集整理了“android笔记”一文,供大家参考学习!


    Android学习
    第一章:Android操作系统概述
    1,Android操作系统时基于Linux平台的开源操作系统,该平台由操作系统、控件组件、用户界面和应用软件组成,是移动终端设备平台。
    2,当前流行的只能手机操纵系统有:Symbian,WindowsMobile,iPhoneOS,Android,BlackBerry和OPhone等。
    3,2007年11月Google公司发布了它的第一个手机智能手机Android。
    4,IDC对Android的市场非常看好,预计在2015年将占有45.5%的市场份额。
    5,Android的缔造者是一个叫做安迪.罗宾的人。
    6,android是基于linux技术开发,由操作系统,用户界面和应用程序组成,允许开发人员自由获取和修改源代码,也就是说,这是一套具有开源性质的移动终端解决方案。
    特点如下:开放性,所有的应用程序师平等的,应用程序间无界限,快速方便的应用程序开发。
    7,Android实现测试功能必须在xml里面为它赋权限:(后)
        android:targetPackage="cn.th"/>(后)
    第二章:Android开发环境搭配
    1,Eclipse之所以备受开发人员青睐,是因为它能够安装插件扩展其功能。
    第三章:第一个Android程序
    1,Android项目包括:主屏幕,布局文件,字符串资源文件。布局文件(/layout/main.xml)中定义了一个TextView,相当于其他语言中的label标签,但不能输入。
    2,Android工程主要的目录有:src,bin,gen,和res等,不同的ANdroid平台目录结构是不同的。
    3,src目录是Android工程的原程序目录,该目录是存放项目的源代码的,gen目录是自动生成的文件,这个目录最关键的文件时R.java,它是个中介文件,在建立项目的时候自动生成,是只读模式,不可更改,通过R.java可以很快地查到所需要的资源,同时查看R.java列表中的资源是否被使用。res资源目录,它包含项目中的资源文件并将其编译到应用程序中。除了在res目录存放资源文件外,Android在assets目录也可以存放资源文件,assets资源目录下的文件不会在R.java自动生成Id,所以读取时必须指定文件的路径.
    4,当在应用程序中添加一个Activity时,需要在AndroidMainfest.xml中进行相应的配置,需要在之间配。
    5,Android的组件介绍:
    Activity表示一个可视化的用户界面,在应用程序中是一个单独的屏幕,每个屏幕都是继承和扩展基类Activity类实现的。
    Service没有可见的
    界面,只是提供服务,能够长时间运行于后台,通过扩展和继承Service类来实现,在后台运行于应用程序的主线程中,因此Service不会阻塞其他组件或用户界面。Service是不能自己启动的,必须通过Context对象调用startService对象或bindService对象,用这两种方法启动Service的生命周期是不同的。
    ContextProvider可以将应用程序特定的数据提供给另外一个应用程序使用,其数据存储方式可以是Android文件系统,SQLite数据库活着其他的方式.
    BroadcastReceiver自身并不实现图形用户界面,但是当他收到某个广播后,BroadcastReceiver可以启动Activity作为响应。
    Intent在不同的组件之间传递消息,将每一个组件的请求意图传给另一个组件,可以实现组件之间调用,还可以通过它在组件间传递数据。
    6,介绍DDMS调试文件的几个工具使用方法:
    Device:是设备面板,这里可以查看模拟器或设备上所有运行的进程
    EmulatorControl:为了测试一些应用需要模拟一些环境,例如:打电话,接收SMS,电话状态的改变以及发送虚拟地址坐标用于测试GPS等
    FileExplorer是文件浏览器,Android是建立在Linux操作系统上的移动操作系统,因此它会有文件系统,Android文件系统在开发阶段需要访问
    LogCat:在软件开发中,日志输出信息时非常重要的调试手段,Android平台提供了一个LogCat显示输出的调试信息。
    第四章:UI基础知识
    1,Android的UI元素包括:Activity,View,ViewGroup和布局
    2,在Android中布局通常由以下几种布局方式实现:
    FrameLayout(框架布局):最简单的布局方式,也可以叫做帧布局
    LinearLayout(线性布局):让所有子元素成为单一方向的布局模式,即子元素垂直或水平排列
    Absolute(绝对布局):让子元素指定准确的X/Y坐标值,并显示在屏幕上面
    RelativeLayout(相对布局):子元素的位置和其他元素的位置相关
    TableLayout(表格布局):将子元素的位置分配到行或列中
    3,事件处理模型:接口实现事件处理模型、内部类实现事件处理模型、匿名内部类处理事件模型。
    4,在Android中,Activity是一个屏幕,Vuew是放置在屏幕中的控件
    5,SmsManagermanager=SmsManager.getDefault();发送信息的方法
    manager.sendTextMessage(number,null,text,null,null);
    6,在android中,所有的控件都继承了android.view.view类
    7,触摸屏幕事件要通过运动事件publicbooleanonTouchEvent(MotionEventevent)触发.
    8,响应键盘事件通过使用KeyEvent接收信息,如果事件源是Activity则重写下面的方法:
    publicbooleanonKeyDown(intkeyCode,KeyEventevent){}
    9.创建菜单选项:publicbooleanonCreateOptionsMenu(Menumenu){}以及publicbooleanonOptionsSelected(MenuItemitem){}
    
    
    第五章:UI基础控件
    1,基础控件主要间接或直接继承了android.View.View类的控件,包括按钮、TextView,EditText,RadioButton,ImageView,进度条,SeekBar和RatingBar
    Android按钮有Button,ImageButton,ToggleButton
    2,权限的作用:为了保护客户的信息安全和隐私数据。
    3,利用Intent类实现简单的拨号功能:
    Intentintent=newIntent();
    intent.setAction("android.intent.action.CALL");
    intent.setData(Uri.parse("tel:"+number));
    startActivity(intent);
    注意AndroidMainFest.xml要配置权限:
    第六章:UI高级控件
    1,数据库的适配器是CursorAdapter,数组对象的适配器是ArrayAdapter,集合对象的适配器是SimpleAdapter,有时系统适配器不能满足我们的需求,就要用到自定义适配器。
    2,Toast用于向用户显示一些信息和帮助,它有三种展现方式:
    文本类型,图片类型,复合类型(LinerLayout控件:通过addView方法把文本和图片绑在一起)
    3,在drawable里面放图的时候,不要以汉字或数字命名,要以英文命名。
    4,所谓的国际化和本地化,就是在资源文件夹res下建立不同国家的语言文件。
    5,数据库的适配器类是CursorAdapter,数组对象的适配器是ArrayAdapter,集合对象的适配器是SimpleAdapter,有时系统给我们的适配器不能满足我们的需求,此时就要自定义适配器了。
    6,在android中,AutoComplete在文本框输入字符时,会出现自动提示功能,它有AutoCompleteTextView和MultiAutoCompleteTextView两种形式。
    7,Spinner控件finalArrayAdapteradapter=ArrayAdapter.createFromResource(
    this,R.array.colors,android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);(数据从xml里面读取)
    ArrayAdapteradapterC=newArrayAdapter(this,
    android.R.layout.simple_spinner_item,CONSTELLATIONS);
    adapterC.setDropDownViewResource(android.R.layout.simple_spinner_item);(数据从数组里面读取)
    8,ImageView无需指定xml控件,为它添加图片直接为imageView.setView("图片")
    9,toast.setGravity(Gravity.CENTER,0,0,)方法设置Toast的位置,第一个参数是对齐方式的常量,第二个参数是X轴的偏移量,第三个参数是Y轴的偏移量。
    10,创建文本信息对话框:AlertDialogdialog1=newAlertDialog.Builder(ToastActivity.this).setIcon(R.drawable.aa).setTitle("标题").setMessage("文本信息")
    图片,标题和信息后面加.setPositiveButton是添加左边按钮,.setNeutralButton是添加中间按钮,.setNegativeButton是添加右边按钮,这些按钮的监听接口是DialogInterface.OnClickLis
    tener.
    11,简单列表项对话框:String[]items=getResources().getStringArray(R.array.hushan);用来创建需要显示的数组对象
    AlertDialogdlg=newAlertDialog.Builder(ToastActivity.this).setTitle("列表项对话框").setItems(R.array.hushan,newDialogInterface.OnClickListener()
    12,单选项列表框:newAlertDialog.Builder(ToastActivity.this).setIcon(R.drawable.aa).setTitle(R.string.hello1).setSingleChoiceItems(R.array.hushan,0,newDialogInterface.OnClickListener()
    13,国际化和本地化:简体中文的文件名是:values-zh-rCN繁体中文的文件名是:values-zh-rTW(命名必须要规范,否则找不到文件)
    第七章:UI布局
    1,Android布局的目的是为了实现不同屏幕比例适配而设计的,有五种布局类:FrameLayout,LinearLayout,AbsoluteLayout,RealtiveLayout和TableLayout
    2,FrameLayout框架布局直接使用的情况不是很多,而是使用它的子类控件,FrameLayout的子类控件包括:TextSwitch,ImageSwitcher,DataPicker,TimePicker.ScrollView和TabHost.TextSwitch是文本切换器,可以切换文本。
    3,通过setContentView(R.layout.portrait_orientation);跳转不同的模拟器界面
    4,if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){:当屏幕为竖屏时,要。。
    5,android布局的目的是为了实现不同屏幕比例适配而设计的,有五种布局类。
    6,FrameLayout框架布局,亦叫帧布局,对象固定显示在左上角,不能指定位置,但允许叠加。FrameLayout子类有TextSwitch,ImageSwitch,DatePicker,TimePicker,ScrollView,TabHost
    7,requestWindowFeature(Window.FEATURE_NO_TITLE);
    8,timePicker控件通过timePicker.setCurrentHour(12);
    timePicker.setCurrentMinute(15);为它初始化小时和分钟
    9,ScrollView有很多属性管理它的样式,xml中:
    android:scrollbars="none":不显示滚动条,但能够滚动.
    android:scrollbarSize:滚动条大小
    10,LinearLayout线性布局,线性布局是所有布局最常用的,它可以让其中的子元素按垂直或水平的方式的排列.
    11,LinearLayout布局通过android:orientation=""指定布局方式是水平还是垂直的android:orientation="horizontal":水平的android:orientation="vertical":垂直的
    12,RelativeLayout相对布局,允许子元素指定它们相对于其他元素或父元素的位置,因此可以左右对齐,上下对齐,置于中央屏幕等方式来排列元素.
    13,AbsoluteLayout:绝对布局指定了元素的准确的X/Y坐标值,并显示在屏幕上(因为它固定了元素位置,在进行屏幕旋转时有弊端,不推荐使用)
    14,在AndroidMainfest.xml里面设置访问网页权限:
    15,TableLayout:表格布局,将子元素的位置分配到行或列中,TableLayout由许多行(TableRow)组成,但是它没有列的概念,列
    是由行中的控件数决定的.
    16,TableLayout合并单元格通过android_span="2"将后两个单元格合并.
    17,android:stretchColumns="0,1,2":第一列,第二列和第三列自动调节列宽(TableLayout标签内部注明)。
    18,布局文件可以嵌套,也可以通过载入定义好的另外一个布局如:
    就是为布局文件载入了一个xml文件名layoutcase1的布局文件
    第八章:多线程
    1,多线程分为java多线程和Android多线程,java多线程继承线程类Thred,并重写run()方法。
    2,使用多线程可以使程序中的多个任务并发运行,它分为主线程和子线程,子,主线程之间可以通过Message发送信息。
    3,android中有两种方法,message和messageQueue可以传递消息。
    4,handler工具类在多线程中有两方面的应用:发送信息和计划任务
    发送信息:在不同的线程之间发送信息,使用的方法是sendXXX()
    计划任务:在未来执行某任务,使用的方法是postXXX();
    5,android.os.Handler通过下面的方法发送信息的:
    sendEmptyMessage(int):发送一个空消息
    sendMessage(Message):发送消息,消息中可以带参数
    sendMessageAtTime(Message,long):未来某一时间点发送消息
    sendMessageDelayed(Message,long):延时Nms发送消息
    6,android.os.Handler通过下面的方法执行计划任务:
    post(Runnable),提交计划马上执行
    postAtTime(Runnable,long)提交计划任务在未来的时间点执行
    postDelayed(Runnable,long)提交计划任务延时Nms执行
    7,android中的多线程涉及的技术包括:Handler,Message,MessageQueue,Looper,HandlerThread。
    8,发送消息和计划任务有什么不同?发送消息可以向一个线程通信请求,请它执行某些处理,并可以携带数据,这些数据被封装在Message对象中,发送消息的线程处理方法就是重写handlerMessage()方法;计划任务也可以向一个线程通信请求,请它执行某些任务,但不可以携带数据,计划任务的处理方法就是重写run()方法.
    9,pull解析器已经集成到Android里面,因此在android里使用pull时无需添加任何jar文件。
    10,要得到使用android的发送短信的权限,必须在Androidmainfest.xml里配置
    要得到使用android的电话拨打的权限,必须在Androidmainfest.xml里配置
    (注意要放在后面)
    第九章:Activity和Intent
    1,一个Activity就是一个单独的屏幕,类似于javaSwing中的JFrame和.Net的WinForm。Activity可以包含若干个View对象,它是一个控件的“容器”,“载体”.
    2,在Android的5个常用组件中,Acti
    vity,Service,ContentProvide,BroadcastReceiver和Intent
    3,在android中应用程序某种意义来说,就是由Activity,Service,BroadcastReceiver和ContentProvide等组件组成的,除了ContentProvide之外,其他组件之间的调用和数据传递都是通过Intent实现的。
    4,intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
    |Intent.FLAG_ACTIVITY_NEW_TASK);清除堆栈中的Activity和开启一个新任务
    5,android的数据存储有四种方式:文件系统,嵌入式数据库SQLLite,网络,SharedPreferences
    6,Android四大组件:Activity,Service,ContentProvider,BroadcastReceiver
    7,Activity的生命周期有四种状态:活动,暂停,停止,死亡
    8,Intent分为显式Intent和隐式Intent,显式Intent是通过指定目标组件名,寻找目标组件,一般应用于调用程序和目标组件在同一个应用中的情况
    隐式Intent是通过指定IntentFiler寻找目标组件,一般应用于调用程序和目标组件不在同一个应用中的情况
    9,从第二个Activity返回到第一个Activity时,需要再次出路某些事件就要使用startActivityResult()方法启动第二个Activity了.
    10,Intent传递数据:
    赋值:Intentintnet=newIntent(Activity1Activity.this,success.class);
    intnet.putExtra("userid",userid.getText().toString());
    传值:Bundlebundle=this.getIntent().getExtras();
    Stringuserd=bundle.getString("userid");
    11,强制横屏:requestWindowFeature(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setRequestedOrientation(0);
    12,只要intent中的动作和类别都出新在意图过滤器中,就能与之匹配,否则匹配失败。
    第十章:数据存储
    1,数据存储的第一步是:添加一个字段类(数据库名,表名和字段名):publicstaticfinalStringTABLE_FIELD_DATE="_id";在添加一个辅助类,继承SQLiteOpenHelper
    在onCreate方法里面,通过stringbuffer增加sql.append("CREATETABLE");
    sql.append(Syscont.TABLE_NAME);
    sql.append("(");
    sql.append(Syscont.TABLE_FIELD_DATE);
    sql.append("NUMERIC(13)PRIMARYKEY,");
    sql.append(Syscont.TABLE_FIELD_INPUT);
    sql.append("Text,");每个字段,通过db.execSQL(sql.toString());调用
    2,增加数据的方法:SQLiteDatabasedb=mDBHelper.getWritableDatabase();获得写入值的方法。ContentValuesvalues=newContentValues();values.put(Syscont.TABLE_FIELD_INPUT,txtinput.getText().toString());通过put的键值对方式为数据赋值。longret1ID=db.insert统的(Syscont.DATABASE_NAME,null,values);调用系统的增加的方法
    3,为了实现SQLite数据访问,可以继承android.database.sqlite.SQLiteOpenHelper类,SQLiteOpenHelper是一个抽象类(是SQLiteOpenHelper类啊不是SQLiteDatabase啊),必须使用下面两种方法:
    voidonCreate(SQLiteDatabasedb)
    voidonUpgrade(SQLiteDatabasedb,intoldVersion,intne
    wVersion)
    voidonCreate(SQLiteDatabasedb):该方法主要作用是创建和初始化数据库中的表等数据库对象,并且初始化表中的数据.
    使用下面语句建表和初始化数据:
    db.execSQL(sql.toString());多次执行db.execSQL语句可创建多个表,有时表建起来还需要插入一些数据
    db.execSQL("insertintowdate(id,inout)values(s,'ss')");
    4,longrowId=db.insert(moni.TAB_Name,StringnullColumHack,values);执行数据库增加方法,其中第一个参数是表名,第二个参数是列名,第三个是增加的值.如果用户需要插入一个全部字段为null的记录,那就使用StringnullColumHack参数指定一个字段。
    5,关于cursor游标的使用:Cursor是每行的集合,使用moveToFirst()定位第一行。getColumnIndex(StringcolumnName)返回指定列的名称,如果不存在返回-1
    getCount():返回Cursor中的行数moveToFirst()移动光标到第一行moveToPosition(intposition)移动光标到一个绝对的位置
    moveToLast()移动光标到最后一行moveToPrevious()移动光标到上一行
    moveToNext()移动光标到下一行
    6,在Android查询数据是通过Cursor类来实现的。当我们使用SQLiteDatabase.query()方法时,就会得到Cursor对象,Cursor所指向的就是每一条数据。结合ADO.net的知识可能好理解一点。Cursor作用类似于java中resultSet,把查询到的结果集封装在一个Cursor对象当中。cursor就像是结果集上的一个游标,可以向前向后移动。
    Cursor位于android.database.Cursor类,可见出它的设计是基于数据库服务产生的。
    7,Android为Cursor提供了一个抽象类CursorAdapter,可以方便实现Cursor与适配器的连接。只需要创建一个继承自CursorAdapter的类,实现其bindView()和newView()两个抽象方法,或根据需要重新实现其他方法就可以用此类来构造一个可适配Cursor的适配器。
    另外还需要注意的是,传入到CursorAdapter中的Cursor结果集必须包含有列名为_id的列,否则CursorAdapter将不会起作用。
    8,
    已经介绍到了几种Android已经实现好了的适配器,其中SimpleCursorAdapter就是为Cursor对象专门实现的一种方便使用的适配器类,下面是对其构造方法传入参数的介绍:
    publicSimpleCursorAdapter(Contextcontex,intlayout,Cursorc,String[]from,int[]to)
    context,当前程序的上下文对象。layout,用来描述如何显示在适配器控件上的布局文件的R类引用。from,由需要显示出来的列名组成的字符串数组。to,由layout所指定的布局文件中子控件的id所组成的整形数组,与from相对应。
    9,我们常用的适配器一共有三个,当然不包含自定义的适配器,哪三个那就是ArrayAdapter,SimpleAdapter,SimpleCursorAdapter这三个,他们都是继承BaseAd
    apter
    其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
    10,Bundle是将数据库传递到另一个上下文保存或回复你自己状态的数据存储方式。
    11,LayoutInflater的作用类似于findViewById(),不同是LayoutInflater是用来找layout下面的xml布局文件并且实例化!而findViewById()是找某一个xml文件下面的具体的某个控件
    第十一章:ContentProvider
    1,contactsContract.Contacts._ID是联系人ID的字段名字,contactsContract._DISPLAY_NAME是联系人名字字段名.
    ContactsContract.CommonDataKinds.Email.CONTENT_URI可以查询出联系人的电话.
    2,ContentProvider操作需要获得读写信息的权限:
    
    
    
    3,获得联系人ID:ContactsContract.Contacts._ID
    获得联系人:ContactsContract.Contacts.DISPLAY_NAME
    获得联系人电话:ContactsContract.CommonDataKinds.Phone.NUMBER
    获得联系人电话的路径:ContactsContract.CommonDataKinds.Phone.CONTENT_URI
    获得联系人电话的ID:ContactsContract.CommonDataKinds.Phone.CONTACT_ID
    获得联系人email的路径:ContactsContract.CommonDataKinds.Email.CONTENT_URI
    获得联系人email的ID:ContactsContract.CommonDataKinds.Email.CONTACT_ID
    获得联系人的email:ContactsContract.CommonDataKinds.Email.DATA
    ContactsContract.CommonDataKinds.Email.CONTENT_FILTER_URI:带有过滤条件的email查询
    ContactsContract.Contacts.CONTENT_FILTER_URI:带有过滤条件的联系人查询
    4,如果想按照联系人进行模糊查询,可以使用ContactsContract.Contacts.CONTENT_FILTER_URI这个URI
    5,适配器分为三种:ArrayAdapter,simpleAdapter,simpleCursorAdapter其中以ArrayAdapter最为简单,只能显示一行,SimpleAdapter有最好的扩充性,可以自定义出各种效果,SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以全面的把数据库的内容以列表的形式展示出来。
    6,managedQuery()与getContentResolver().query()的区别:managedQuery()方法是将游标声明周期的管理委托给Android框架,而getContentResolver().query()则不能做到这这一点,必须自己关闭游标:cursor.close()
    7,查询通话记录是通过CallLog.Calls.CONTENT_URI的使用完成。CallLog.Calls中有3个常量,CallLog.Calls.INCOMING_TYPE:来电CallLog.Calls.OUTGOING_TYPE:去电
    CallLog.Calls.MISSED_TYPE:未接来电
    8,ContentProvider访问短信:
    content://sms:获取短信
    信息URIcontent://sms/inbox:获取接收短信信息URIcontent://sms/sent获取发送短信信息
    第十二章:多媒体
    1,媒体文件有很多种格式,大体上分为音频文件和视频文件,两种媒体文件有很大的差别。
    2,音频和视频技术重点是播放状态和状态转移的方法,使状态转移时MediaPlayer对象中定义的方法,MediaPlayer可以对应音频和视频播放,MediaPlayer和状态转移有关的方法有六个:
    pause(),暂停播放方法start()开始播放方法stop()停止播放方法prepare()同步预处理方法,适用于本地文件播放prepareAsync()异步预处理方法,适用于网络文件播放reset()在位置状态下调用该方法进入闲置状态
    3,SurfaceHolder中定义了四种Surface类型,分别是:NORMAL,HARDWARE,GPU和PUSHBUFFERS
    NORMAL:一种规则的RAM作为缓冲区的Surface对象
    HARDWARE:用于硬件加速的Surface对象
    GPU:用于图形处理器的Surface对象
    PUSHBUFFERS:是推送方式的Surface对象
    视频播放器需要先在xml文件中定义Surface控件
    4,视频文件中,每一个SurfaceView包含一个SurfaceHolder实例
    5,网络文件和本地文件其实都可以采用相同的播放方式,考虑网速的问题,网络文件一般采用异步预处理方法PrepareAsync()
    6,音频文件分为无损格式和有损格式,无损格式:是非压缩数据格式,文件很大,一般不适合移动设备有损格式:对于数据进行了压缩,压缩后丢掉了一些数据。
    7,从ContentProvider中读取音乐列表
    ContentResolverresolver=getContentResolver();
    cursor=resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
    null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
    第十三章:service
    1,service分为本地service和远程service
    本地service:是一种进程内通信,与调用组件在同一个应用中
    远程service:一般用于进程中通信,与调用组件不在同一个组件中
    2,sd卡加载文件出错:Failedtopushtheitem时解决办法:window>>preference>>android>>DDMS>>ADBconctiontimeout(ms)把时间改大
    3,FilesdCardDir=Environment.getExternalStorageDirectory();
    Stringpath=sdCardDir.getPath()+"/aa.mp3";找到sd卡下面的文件
    4,调用service时,要用startService(intent);进行跳转
    5,每个service都必须在Androidmainfest.xml里进行声明
    6,stopService(),startService()关闭和启动服务,适用于服务和访问者之间没有交互的情况,如果服务和访问者之间需要调用方法或传递参数,则使用bindService()和unbindService()启动和关闭服务
    7,IBinder对象用于实现服务和访问者之间的通信.同样是通过IBinder对象调用service中的方法
    8,AIDL是Android接口描述语言,用来声明想要调
    用的远程接口,用AIDL工具生成一个java接口,这个java接口对客户端和远程service都可见
    9,实现本地服务的思路:服务类:主类继承Service;创建私有类继承Bind,在里面返回定义的方法;定义一个私有对象,实例化私有类;在默认的Bind方法里面返回私有对象
    Activity类:Intent激活:Intentservice=newIntent(this,StudentService.class);
    赋对象:bindService(service,conn,BIND_AUTO_CREATE);
    定义私有类实现ServiceConnection接口:privateclassStudentServiceConnimplementsServiceConnection{
    实例化成员变量,为conn赋值:privateServiceConnectionconn=newStudentServiceConn();
    10,关于service传递参数的问题,实现Parcelable必须实现的方法:
    voidwriteToParcel(Parceldest,intflags),在writeToParcel方法中将需要序列化的值写入Parcel对象
    intdescribeContents(),描述包含数据类型(returnCONTENTS_FILE_DESCRIPTOR;)
    11,UrisArtworkUri=Uri.parse("content://media/external/audio/albumart");获得专辑的ID,把字符串格式转变成Uri格式
    第十四章:BroadcastReceiver和Notification
    1,BroadcastReceiver和service被称为非UI组件,后台组件。
    2,当有多个BoradcastReceiver发出时,Context.sendBroadcast方法发出是同时接收的,而Contex.sendOrderdBroadcast方法是按照顺序依次轮流接收的.
    3,与service一样,BoradcastReceiver在使用时,必须在xml文件里进行注册,这种注册方式是静态注册
    动态注册方式是在程序中通过registerRecevier方法注册,unregisterRecevier方法注销
    protectedvoidonResume(){
    super.onResume();
    IntentFilterfilter=newIntentFilter();
    filter.addAction(AudioService.ALBUM_UPDATE);
    registerReceiver(receiver,filter);
    }
    @Override
    protectedvoidonPause(){
    super.onPause();
    unregisterReceiver(receiver);
    }
    4,android中的系统广播:
    ACTION_TIME_TICK:时间改变时发出广播Action
    ACTION_TIME_CHANGED:时间设置改变发出广播Actgion
    ACTION_TIMEZONE_CHANGED:时区改变时发出广播Actgion
    ACTION_BOOT_COMPLETED:系统启动完成时发出一次广播Action
    ACTION_PACKAGE_ADDED:一个新的应用程序安装到设备上时发出的广播
    ACTION_PACKAGE_REMOVED:一个新的应用程序包程序从设备上卸载时发出的赋值NGED:电池电量过低或电池的状态发生变化时发出的广播
    4,BroadcastReceiver负责短时间处理service负责长时间处理
    5,一个广播发出之后,只要是Intent能够匹配的,BroadcastReceiver都可以接收到
    6,必须权限:
    
    
    第十五章:云端应用
    1,http通信时云端应用最常用的技术之一,http请求方法有post和get等,http通信编程可以使用java的java.net.URL类,但是这个类只能发送get请求。也可以使用Apache组织提供的HttpClient类库,HttpClient类库已经集成到Android中了。
    2,xml文件的基本框架:
    声明,根标签,子元素,属性
    
    第十六章:GoogleMap和定位系统
    1,注册MD5拇指纹:cdC:\ProgramFiles\Java\jdk1.5.0_06\bin执行
    keytool-list-aliasandroiddebugkey-keystore"C:\DocumentsandSettings\Administrator\.android\debug.keystore"2,关于android的绘图技术:通过重写绘制方法protectedvoidonDraw(Canvascanvas)//重写绘制的方法
    canvas.drawColor(Color.BLACK):绘制黑色的背景Paintpaint=newPaint():创建画笔
    paint.setColor(Color.yeelow):设置画笔的。颜色为红色画线:canvas.drawLine(150,25,250,110,paint)
    3,项目:铁路助手,日程管理专家,MP3,电子阅读器。
    4,Google地图是Google公司提供的电子地图服务,能提供3种视图:矢量地图,不同分辨率的卫星地图,地形地图。
    5,MD5认证指纹:28:C4:A2:FD:DF:68:F8:2A:E3:41:75:A2:D4:59:D8:D4
    6,实现goolemap的步骤:创建GooleAPIAndroid项目,编写MapActivity,编写MapView布局文件,在AndroidMainFest中增加intent访问权限,在AndroidMainFest中增加Coole地图函数库。
    7,MapActivity类中有一个抽象方法isRouteDisplayed(),该方法是告知Goole服务器在我们的应用中是使用了显示“道路信息”有关服务。
    8,在布局文件中使用标签,这个标签就是MapView控件,需要将生成的Key在此指定。
    9,在AndroidMainFest中增加goole地图的函数库的声明:(application里)
    10.为了对地图实现有效的控制,android提供了MapController类,通过MapController可以实现对地图的控制,通过MapView对象可以得到MapController。
    11,mapview=(MapView)findViewById(R.id.hushan);
    MapControllermc=mapview.getController();
    GeoPointpoint=newGeoPoint((int)(39.904214*1E6),(int)(116.407413*1E6));//为地图中心点赋值
    mc.setCenter(point);//设定地图中心点
    mc.setZoom(14);//设置地图的缩放级别,通过方法mc.setZoom(intzoomLevel)实现其中zoomLevel的取值范围为1到21,1是全球地图,21是街道地图。
    12,要地图可以移动和缩放,需要在xml里面设置布局文件:android:clickable="true"除此之外,还修改程序代码:mapview.setBuiltInZoomControls(true);里面的参数意指可以进行缩放。
    
    课外延伸
    1,测试需要的权限代码
        android:targetPackage="com.Dbopen"android:label="TestsforMyApp"/>
    
    2,Sqlite数据库的学习:personidintegerprimarykeyautoincrement:设定为主键并且自动增长
    Sqlite数据库操作的步骤:1,创建数据库(自动创建数据库功能)2,
    3,getWritableDatabase();与getReadableDatabase();的区别:前者可用于向数据库写数据,后者用于读数据,主要执行数据的查询功能。
    sqlite数据库的查询和其他三种操作有所不同:db.rawQuery("select*frompersonwhereid=?",newString[]{id.toString()});
    4,改变手机配置权限(判断横屏和竖屏)
    5,桌面创建快捷方式的权限:
    6,内容提供者使用方法(对外共享数据):
    第一步:创建内容提供者类,并在xml文件里配置
    android:authorities="hushan"是内容提供者的主机名,它是唯一性的。
    7,IO流的学习:字节流可以处理所有类型数据,而字符流只能。处理字符数据,字节流的输入输出类为inputStream,outputStream字符流的输入输出类为reader,write
    字符流的缓冲区:BufferedWrite
    r(),BufferReader()缓冲的存在是为了增强流的功能而存在,建立缓冲区对象时必须把流对象作为参数传递给缓冲区的构造函数。
    8,在Socket中,输入和输出流要用DataOutputStream和DataOutputStream,不可以用PrintWriter、StreamReader等。
    
    
  • 上一篇资讯: android笔试题
  • 下一篇资讯: android程序5秒自动更新
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号