友录总结

来源:互联网 发布:叫停网络售药 编辑:程序博客网 时间:2024/06/04 19:32

广播接受者:(有序广播)

动态注册:在哪个activity中注册,就会在开启这个界面的时候才会注册这个广播接受者(只有那个注册的组件激活了,广播才激活,宿主死亡,广播死亡;)

静态注册:(长住型广播,与组件没有关系,收到广播之后10s之后销毁,再收到广播,在创建一个广播)

订阅广播:使用intentflater进行订阅;

 

截获短信;

 

忽略当前的有序广播,使系统的短信应用不在接收该短信:

abortBroadcast();

数据库中插入需要:

ContentValues values=new ContentValues();

两个activity跳转

intent;

String action=intent.getAction();

绘制edittext文本;

pendingintent;

一个广播接收器可以接收多个

 

 

日期格式化;

 

(信息解读方法)

soundpool;

动态添加布局;

:lruchache;spasearray;

========================

1短信聊天;(信息解读方法)

 

// 短信会话Uri

 

public static final Uri CONVERSATION_URI = Uri

.parse("content://mms-sms/conversations");

 

--查看所有的会话(thread)

根据uri查询我们想要的列,封装成一个conversation对象

 

--查看会话下的所有短信(sms)根据thread查看对应的sms;

 

public static final Uri SMS_URI = Uri.parse("content://sms");

 

提取出短信内容,封装成短信对象(既有收件箱的短信.还有发件箱的短信)

 

--实时聊天

1)接收短信  如果我们收到短信,系统会发出有序广播,我们注册广播接受者,设置优先级比较高,来拦截系统发出的广播,并接受到广播后,abort(忽略这条广播,不向下传递,就系统的就接受不到这条信息了,也就不会存放到收件箱中了),qie我们要把读到的短信写进收件箱这个表中,因为我们读取短信是从收件箱中读取的;同时我们接受到的信息要在chatActivity中显示,这个信息是从?????

 

2)发出短信: pendingintent; smsmsnsger.send方法取发送信息,其中存在pendingintent;我们自己要订阅这条短信,将短信存在发件箱,

 

2拨打电话;

 

打电话的实现调用的是系统的打电话的activity来实现打电话

 

soundpool;

 

3通话记录:(contacts.calls)

 

通话记录的删除和遍历

 

 

4通讯录模块

查看所有的通讯录(contact查出id--date)

编辑系统的通讯录的编辑

添加

删除

管理:lruchache;spasearray;

 

 

===================================================================

android 项目搭建模式:mvc

有利于项目的解耦;面向对象的程序开发追求的目标;

m:model模型层;业务处理,数据库的访问;

 biz:bisiness(业务逻辑处理)

 dao data access object(数据访问层)

 entity(实体数据,减少数据访问时,参数的个数)

v:view 视图层,(自定义view,视图文件)

c:controller;控制器activity,fragment;(调用m层的逻辑,然后控制view)

===================================================================

aidl;

ipc进程间通讯

start service;就算是组件死亡,service也存在

 

bindserivice;实现数据交互 ,同死

 

 

//bindservice 绑定成功后执行onbind方法,返回ibinder的实现类,传递到connectionbinder参数中;

 

======================================================

广播:

======================================================

1发送广播方式:使用到pendingintent的方法;来携带这个广播;

当接收广播的对象不同时,创建的pendingintent的方式也不相同;

 

有三种方式:

1发送给activity

2发送给service

3发送给broadcast

 

PendingIntent pIntentintent=PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

 

这里需要intent意图,这个intent添加action;

intent.setaction();

这个intent中可以封装想要携带的意图;

 

2接收广播的方法:

0)创建广播:自己写的广播继承brodcastreceiver;

在这里存在一个方法 onreceive方法;当我们接受到这个广播的时候会执行这个方法;

在这个方法中会将意图传递过来,解析这个意图,将里边存储的东西取出来

1)注册广播;

register

2)广播过滤器 intentfilter();添加action,过滤这个action;

intentfilter.addaction();判断接受的哪种类型的广播,进行相应的处理

如果是有序广播可以设置优先级;

3)通过intent.get exre可以获得发送广播是存储的数据;返回值类型是buddle类型的, //如果要解析消息的话,要是用一个消息的协议:puds;

将消息内容存储在stringbuilder的数组中,该数组是不安全的,只可以在单线程中使用;

=============================================================

绘制一个edittext文本:

=============================================================

1使用到了radius:绘制边角,一般是8dp

2使用到了stoke :描边;设置描边的宽度和颜色:width=1dp;color=;

3使用到了solid;填充色:edittext里边的颜色;

4padding: 里边内容距外边边框的距离;

============================================================

日期格式化方式:

============================================================

首先使用了三个api对象;

1date

1)无参构造方法,得到的date是当前系统时间

Date date = new Date();

打印结果:

Thu Sep 08 19:18:40 CST 2016

 

2)对象()中使用System.currentTimeMillis()

Date now = new Date(System.currentTimeMillis());

获得系统当前时间,且无时无刻不放大;

 

3)Date date1=new Date(2015-1900,11,30,23,59,59);

传入指定的时间值,设置date为固定的对象;

2simpledateformate

目的是,date创建的对象会显示具体的时间,而有时候,我们需要具体某一个时间,不需要如:我们只需要小时和分钟,那我们就需要转换一下格式,就需要simpledateformate

 

SimpleDateFormat format1 = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");

(构造方法中的参数规定了转换的形式)

再调用farmate方法,参数传入date对象;

 

3calender

calender类是一个抽象类,可以通过getinstace获得实例;

主要用途:

1)可以获得当前的日历,并通过calender.get();方法获得对应的时间日期;各条(calender.day of month);得到这个月中的一天;

2)可以设置某一个日历的时间,calender.settimeinmiillis();然后通过这个long类的后的到集体的某一天,然后可能执行相减的动作,求出差值;

 

==================================================================

缓存数据

==================================================================

1缓存bitmap时使用到了lrucahce;

1)建立lrucache对象

lrucache<Intenger,Bitmap> cache;

重写里边的insizeof方法;(当控件满了的时候,获得再要存进来的数据的大小,好给这个数据腾出空间)

当我们通过cursor查出来所有的联系人时,将联系人的头像信息存放在缓存中,

使用 cache.put()方法存入

2)SparseArray<Contact> contactschache=new SparseArray<Contact>();

使用sparsearray 存入联系人的信息; add();

=================================================================

soundpool

=================================================================

1构造方法:

SoundPool提供了一个构造器,该构造器可以指定它总共支持多少个声音(也就是池的大小)、声音的品质等。

SoundPool(int maxStreams, int streamType, int srcQuality)

第一个参数指定支持多少个声音;

第二个参数指定声音类型:(AudioManager.STREAM_MUSIC)

第三个参数指定声音品质。

2一旦建立了soundpool就使用多个重载的方法来加载音效

int load(Context context, int resld, int priority):从resld 所对应的资源加载声音。

3soundpool提供播放音乐的方法;

inplay();

int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate):该方法的第一个参数指定播放哪个声音;leftVolumerightVolume指定左、右的音量:priority指定播放声音的优先级,数值越大,优先级越高;loop指定是否循环,0为不循环,-1为循环;rate指定播放的比率,数值可从0.521为正常比率。

4soundPool.setOnLoadCompleteListener

soundpool是设置监听,使加载音乐完毕后执行这个方法的回调;

在这里进行播放音乐;

5release

在执行完播放后,调用soundpoolrelease方法释放资源;

==============================================================

Dialog

==============================================================

1创建dialog对象,可以是自定义的,也可以使用系统的

1)系统的dialog

alertdailog.Builder builer=new alertDailog.Builder(context);

Dialog dailog= bilder.creat();

dailog.show();

2)如果是我们自己的布局,需要引入我们的布局

 //解析我们自己的布局

 View view=LayoutInflater.from(context).inflate(R.layout.inflater_add_dialog, null);

//将这个布局设置到dialog;

dialog.setContentView(view);

3)就是dialog的显示内容了

settitle;

setnagtivebutton,....

4)使用dialog之后实现了跳转时,要销毁dialog

dialog.dismiss();

0 0
原创粉丝点击