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);
    }

    }


好的这个时候就可以接收广播并且通知视图刷新了,因为我的项目中是使用的公司的框架通知的刷新,所以就不把案例放上去了,按照这个步骤是都可以搞好的。

步骤已经很详细了。









3 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 耳机链接处断了怎么办 表链从表盘断了怎么办 龟头和皮分开了怎么办 微信买票被骗了怎么办 撞车了我的全责怎么办 蒙田包包里面不耐脏怎么办? 摩托车转向灯不会打怎么办 浓硫酸弄到脸上怎么办 钥匙被锁在家里怎么办 有奶宝宝吸不出来怎么办 奶涨宝宝吸不出来怎么办 高铁票未取误点怎么办 飞猪上12306占座失败怎么办? 新生儿肚脐还没有脱落发炎怎么办 蹲坑被纸巾堵了怎么办 老公有外遇老婆不想离婚怎么办 结婚十年妻子出轨该怎么办 初生儿眼睛多眼屎怎么办 被丝袜脚摩擦过瘾了怎么办 老公在卧室装摄像头怎么办 听了鬼故事害怕怎么办 看完鬼片害怕睡不着怎么办 晚上看了鬼片怎么办 说话不经过大脑考虑怎么办 我太受欢迎了怎么办动漫结局 狗胃不好总呕吐怎么办 比格犬晚上叫怎么办 玻尿酸隆鼻变宽了怎么办 打玻尿酸鼻子变宽怎么办 鼻炎的人感冒了怎么办 小孩上幼儿园反复感冒怎么办 3岁宝宝感冒鼻炎怎么办 鼻炎犯了鼻子不通气怎么办 食物呛到鼻子里怎么办 胃疼引起的焦虑怎么办 泰迪犬发生口腔亏痒怎么办? 俩鼻子都堵了怎么办 2岁宝宝鼻甲肿大怎么办 感冒10多天不好怎么办 宝妈鼻炎犯了怎么办 鼻炎犯了好多黄鼻涕怎么办