1.本地广播
//TODO:本地广播
localBroadcastManager = LocalBroadcastManager.getInstance(this);
//TODO:广播接受者
MyReceiver myReceiver = new MyReceiver();
//TODO:意图过滤器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.dongzhi");
//TODO:广播接收器
点击按钮发送广播
localBroadcastManager.registerReceiver(myReceiver, intentFilter);
//TODO:本地发送
Intent intent = new Intent();
intent.setAction("com.dongzhi");
//TODO:发送广播
localBroadcastManager.sendBroadcast(intent);
2.观察者发送短信自动输入
private Handler handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
String s = (String) msg.obj;
//TODO:显示到输入框中
msg1.setText(s);
}
};
//TODO:获取读取权限
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
requestPermissions(new String[]{Manifest.permission.READ_SMS},100);
}
//TODO:注册一个内容解析者
ContentResolver contentResolver = getContentResolver();
//TODO:注册一个内容观察者
MyObServer myObServer = new MyObServer(handler, this);
contentResolver.registerContentObserver(Telephony.Sms.CONTENT_URI,true,myObServer);
ObService 页面
public MyObServer(Handler handler, Context context) {
super(handler);
this.context = context;
this.handler = handler;
}
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i(TAG, "onChange: ");
//TODO:注册一个内容解析者
ContentResolver contentResolver = context.getContentResolver();
//TODO:查询短信
Cursor query = contentResolver.query(Telephony.Sms.CONTENT_URI, null, null, null, null);
if (query!=null){
//TODO:查询最近的一条
query.moveToFirst();
//TODO:查询短信内容的字段
String string = query.getString(query.getColumnIndex(Telephony.Sms.BODY));
Log.i(TAG, "onChange: "+string);
//TODO:获取短信
Message obtain = Message.obtain();
obtain.obj = string;
//TODO:发送获取到的短信
handler.sendMessage(obtain);
query.close();
}
}