【转】android开发之短信监听拦截BroadcastReceiver的使用

Posted by & filed under Uncategorized.

1.广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。 普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高, 但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。 有序广播是按照接收者声明的优先级别,被接收者依次接收广播。如:A的级别高于B,B的级别高于C,那么,广播先传给A,再传给B,最后传给C 。 优先级别声明在 intent-filter 元素的 android:priority 属性中,数越大优先级别越高,取值范围:-1000到1000,优先级别也可以调用IntentFilter对象的setPriority()进行设置。 有序广播的接收者可以终止广播Intent的传播,广播Intent的传播一旦终止,后面的接收者就无法接收到广播。 另外,有序广播的接收者可以将数据传递给下一个接收者,如:A得到广播后,可以往它的结果对象中存入数据,当广播传给B时,B可以从A的结果对象中得到A存入的数据。 Context.sendBroadcast() 发送的是普通广播,所有订阅者都有机会获得并进行处理。 Context.sendOrderedBroadcast() 发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者, 前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。 对于有序广播,前面的接收者可以将数据通过setResultExtras(Bundle)方法存放进结果对象,然后传给下一个接收者,下一个接收者通过代码:Bundle bundle = getResultExtras(true))可以获取上一个接收者存入在结果对象中的数据。 2. 广播接收者(BroadcastReceiver)用于接收广播 Intent,广播 Intent 的发送是通过调用 Context.sendBroadcast()、Context.sendOrderedBroadcast() 来实现的。 通常一个广播 Intent 可以被订阅了此 Intent 的多个广播接收者所接收。 要实现一个广播接收者方法如下: 第一步:继承BroadcastReceiver,并重写onReceive()方法.

  第二步:订阅感兴趣的广播Intent,订阅方法有两种:  第一种:使用代码进行订阅

第二种:在AndroidManifest.xml文件中的<application>节点中进行订阅: <pre class=”html” name=”code”><receiver android:name=”.IncomingSMSReceiver”> <intent-filter><action android:name=”android.provider.Telephony.SMS_RECEIVED”/> </intent-filter> </receiver> </pre> 3.在Android中,每次广播消息到来时都会创建BroadcastReceiver实例并执行onReceive() 方法, onReceive() 方法执行完后,BroadcastReceiver 的实例就会被销毁。 当onReceive() 方法在10秒内没有执行完毕,Android会认为该程序无响应。 所以在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR(Application No Response)的对话框。 如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成。 这里不能使用子线程来解决,因为 BroadcastReceiver 的生命周期很短,子线程可能还没有结束BroadcastReceiver就先结束了。 BroadcastReceiver一旦结束,此时BroadcastReceiver所在的进程很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。 如果它的宿主进程被杀死,那么正在工作的子线程也会被杀死。所以采用子线程来解决是不可靠的。 4. 其它广播Intent 除了短信到来广播Intent,Android还有很多广播Intent,如:开机启动、电池电量变化、时间已经改变等广播Intent。 接收电池电量变化广播Intent ,在AndroidManifest.xml文件中的<application>节点里订阅此Intent: <receiver android:name=”.IncomingSMSReceiver”> <intent-filter> <action android:name=”android.intent.action.BATTERY_CHANGED”/> </intent-filter> </receiver> 接收开机启动广播Intent,在AndroidManifest.xml文件中的<application>节点里订阅此Intent:

并且要进行权限声明:

  5.接受系统的短信广播,操作短信内容。 AndroidManifest.xml:

java:

  Read more […]

气象水文项目知识点总结

Posted by & filed under Uncategorized.

一,“==”和equal的区别 写代码的时候使用”==”,导致if条件明明成立,但是不执行if里面的语句。经过单步调试,得出应该使用equal。 在网上查两者的区别,用一句话总结一下:在比较字符型数据时,==比较的是内存中的地址,比较的是对象的句柄;而equals()比较的是地址内的内容,比较的是对象。 二,json解析 项目中涉及json解析,尝试三种方法,分别是fastjson,gson,json-smart,前两者的使用方法基本一致,解析代码如下: fastjson方法:

json-smart解析代码如下:

经测试,fastjson解析最快,使用fastjson解析方式。 三,图层管理模块,列表删除功能 开始删除列表选项,使用删除索引的方式,产生列表选项删除,但是地球上还存在相对图层。为列表每一个选项赋值一个UUID,删除这个唯一的UUID,保持列表和地球上信息一致。 四,对list的遍历 for(int Read more […]

Android通过URL跟web服务器通信

Posted by & filed under Uncategorized.

通过URL和服务器通信的时候,注意不要用localhost或者127.0.0.1。需要在命令行里用ipconfig获得本PC的IP地址。 验证PC端成功启动服务器。 获取PC端IP地址 Android客户端 tomcat服务器端代码:

在web.xml里配置一下loginServlet。

Android客户端:

添加网络权限: <uses-permission android:name=”android.permission.INTERNET”></uses-permission> 本文转自:http://www.oschina.net/code/snippet_203635_8869 Read more […]

【转】Android提交数据到服务器的两种方式四种方法

Posted by & filed under Uncategorized.

Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法。 代码如下:

 

【转】Android Inflater

Posted by & filed under Uncategorized.

Inflater英文意思是膨胀,在Android中应该是扩展意思。 在实际开发中LayoutInflater 的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。 具体作用: 1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入; 2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。 获得 LayoutInflater 实例的三种方式 1.LayoutInflater inflater = getLayoutInflater();  //调用Activity的getLayoutInflater() 2.LayoutInflater localinflater =(LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); 3. LayoutInflater Read more […]

ViewStub的应用

Posted by & filed under Uncategorized.

在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。但是它的缺点就是,耗费资源。虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。 推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候,或是调用了ViewStub.inflate()的时候,ViewStub所向的布局就会被Inflate和实例化,然后ViewStub的布局属性都会传给它所指向的布局。这样,就可以使用ViewStub来方便的在运行时,要还是不要显示某个布局。   但ViewStub也不是万能的,下面总结下ViewStub能做的事儿和什么时候该用ViewStub,什么时候该用可见性的控制。 首先来说说ViewStub的一些特点: 1. Read more […]

【转】Java集合类详解

Posted by & filed under Uncategorized.

集合类说明及区别 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后 Read more […]

【转】Android listview加载性能优化

Posted by & filed under Uncategorized.

在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。 ListView加载数据都是在public View getView(int position, View convertView, ViewGroup parent) {}方法中进行的(要自定义listview都需要重写listadapter:如BaseAdapter,SimpleAdapter,CursorAdapter的等的getvView方法),优化listview的加载速度就要让convertView匹配列表类型,并最大程度上的重新使用convertView。 getview的加载方法一般有以下三种种方式: 最慢的加载方式是每一次都重新定义一个View载入布局,再加载数据。

正确的加载方式是当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据。

最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可。

 

三种方式加载效率对比如下图所示: 说明:上述三个例子代码摘自google Read more […]

【转】Android四大基本组件介绍与生命周期

Posted by & filed under Uncategorized.

本文转自http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html。 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。 一:了解四大基本组件 Activity : 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。 Activity之间通过Intent进行通信。在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。 典型的动作类型有:M AIN(activity的门户)、VIEW、PICK、EDIT 等。而动作对应的数据则以URI 的形式进行表示。例如:要查看一个人的联系方式,你需要创建一个动作类型为VIEW 的intent,以及一个表示这个人的URI。 与之有关系的一个类叫IntentFilter。相对于intent Read more […]

[转]android socket聊天实现与调试

Posted by & filed under Uncategorized.

本文完整代码可以在GitHub里获取https://github.com/zz7zz7zz/android-socket-client。 1.主要的Client类

2.使用SocketTool工具进行调试 a.创建Server.点击TCP Server ,点击创建,输入端口号,点击确定(同时要点击启动监听)。 b.在android客户端输入IP和端口,点击打开或者重连,socketTool便可以看见你连上的Client了 c.在客户端输入要发送的文字,点击发送,在socketTool便可以看到你往server里发送的数据了, 在socketTool里输入要往客户端发送的内容,点击发送,便可在手机客户端里看到Server往client发送的数据了 这样就可以Client-Server之间进行数据对发了。 本文转自http://blog.csdn.net/zz7zz7zz/article/details/9341635 Read more […]