android短信实时获取与视图的刷新
来源:互联网 发布:wsdl怎么生成java代码 编辑:程序博客网 时间:2024/05/16 23:42
首先呢既然需要获取手机的短信,首先要创建自己的BroadcastReceiver类继承BroadcastReceiver;
public class MYSMSBroadcastReceiver extends BroadcastReceiver {
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
/*MySqliteOpenHelper helper = new MySqliteOpenHelper(context, MySqliteOpenHelper.SQlite.DB_NAME, null, 1);
//获得数据库对象helper.get...
//可读,并且可写---的数据库: 磁盘满的情况,写不进去,不写了,一般情况使用这个
*//*db = helper.getReadableDatabase();*/
if (intent.getAction().equals(ACTION)) {
StringBuffer SMSAddress = new StringBuffer();
StringBuffer SMSContent = new StringBuffer();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObjects = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObjects.length];
for (int i = 0; i < pdusObjects.length; i++) {
messages[i] = SmsMessage
.createFromPdu((byte[]) pdusObjects[i]);
}
for (SmsMessage message : messages) {
SMSAddress.append(message.getDisplayOriginatingAddress());
SMSContent.append(message.getDisplayMessageBody());
Log.e("aaaaaa","手机号:"+SMSAddress.toString()+"短信内容:"+SMSContent);
}
}
}
}
上面就是自己BroadcastReceiver类的方法,去AndroidManifest.xml中去注册静态广播
<receiver android:name=".receiver.SMSBroadcastReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
加上权限: <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
那么现在已经可以运行获取到短信了,如果第一条没有获取到就再发一条试试看是否能再次获得短信,如果不能请对照上面的步骤。
现在拿到短信的内容和发送的手机号,我们就可以通知View刷新了!我的想法就是在接收短信成功的时候再发送一条广播,Activity接收到这条广播之后就可以去通知刷新了。
如果这个广播是静态注册的,那么只能在Activity中写一个静态的内部类,所以一些参数也要改成静态的参数,会非常不方便。所以我们使用动态注册广播。
Intent intent1=new Intent("MyMoveBroadcastReceiver");
context.sendBroadcast(intent1); 写入上面的for循环中,当然我们可以把获取的内容保存到本地。
SharedPreferences preferences=context.getSharedPreferences("mycontext", Context.MODE_PRIVATE);
SharedPreferences.Editor editor=preferences.edit();
editor.putString("phone",SMSAddress.toString());
editor.putString("context",SMSContent.toString());
editor.commit();
这段代码要写在发送广播前面,不然广播发送出去了,本地去还没有保存到值。
我的需求是使用ListView来即时显示,所以我使用的SQLList数据库保存的短信值,为了方便就先把值保存到本地吧。
把上面的代码写入for循环之后就可以回到Activity中了。
Activity中初始化
public class MainActivity extends AppCompatActivity {
private TextView phonenumber,taketime,contenx;
private ListView mylv;
private mybroad receiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mylv = (ListView) findViewById(R.id.mylv);
/* MySqliteOpenHelper helper = new MySqliteOpenHelper(this, MySqliteOpenHelper.SQlite.DB_NAME, null, 1);
db = helper.getReadableDatabase();*/
phonenumber = (TextView) findViewById(R.id.phonenumber);
taketime = (TextView) findViewById(R.id.taketime);
contenx = (TextView) findViewById(R.id.contenx);
MoveBroadcastReceiver();
}
private void MoveBroadcastReceiver(){
receiver = new mybroad();
IntentFilter filter = new IntentFilter();
filter.addAction("MyMoveBroadcastReceiver");
this.registerReceiver(receiver, filter);
}
//内部类继承BroadcastReceiver
public class mybroad extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("MyMoveBroadcastReceiver")) {
updateview();//改变视图的方法。
}
}
}
private void updateview() {
SharedPreferences preferences=getSharedPreferences("mycontext", Context.MODE_PRIVATE);
String numeberstr=preferences.getString("phone","");
String contextstr=preferences.getString("context","");
String timestr=preferences.getString("time","");
phonenumber.setText(numeberstr);
taketime.setText(timestr);
contenx.setText(contextstr);
}
}
好的这个时候就可以接收广播并且通知视图刷新了,因为我的项目中是使用的公司的框架通知的刷新,所以就不把案例放上去了,按照这个步骤是都可以搞好的。
步骤已经很详细了。
- android短信实时获取与视图的刷新
- Android笔记 如何获取短信实时内容
- 【Android】短信应用——短信信息实时获取
- 【Android】短信应用——短信信息实时获取
- android中View的实时刷新
- android中View的实时刷新
- Android: 获取短信的发信人
- Android: 获取短信的发信人
- android获取短信的内容
- 获取android的实时网速
- android实时刷新
- Android之短信监听与内容获取
- 物化视图的创建与刷新
- angular 广播实现实时刷新视图
- android 短信管理(获取接受到短信的消息)
- android 短信管理(获取接受到短信的消息)
- iOS 短信与电话事件的获取
- iOS 短信与电话事件的获取
- c++ make_pair valarray使用实例
- Java —— 有关存储学生信息数组的操作
- YII2.0安装教程,数据库配置前后台
- 返回弹出弹出框时候,报错 IllegalStateException: Can not perform this action after onSaveInstanceState
- 抽象工厂模式
- android短信实时获取与视图的刷新
- json / xml / protobuffer/TLV
- 如何使用struts框架做下拉框(前端jsp+jquery+ajax)
- 坐标转换
- Thu May 12 2016 08:00:00 GMT+0800 (中国标准时间)转化为yyyy-MM-dd(通过js)
- 网络请求框架OkHttp基础用法
- [LeetCode]395. Longest Substring with At Least K Repeating Characters
- 流式布局
- Servlet和JSP之初步了解