按照书里面所讲,建了一个内部类用于接受系统发出的SMS_RECEIVED广播。通过代码进行注册,并设置了最高优先级。同时模拟器里手动打开了应用的权限,允许接受短信。
但问题是onReceive方法怎么也执行不到,也就是说接收器压根就没收到广播,真机里也没法收到广播(Android5.1);
以下是代码:
package com.example.smstest;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private TextView sender;
private TextView content;
//private Button send_broad;
private IntentFilter receiveFilter;
private MessageReceiver messageReceiver;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activiry_main);
sender = (TextView) findViewById(R.id.sender);
content =(TextView) findViewById(R.id.content);
//send_broad=(Button) findViewById(R.id.broad);
receiveFilter = new IntentFilter();
receiveFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
//receiveFilter.addDataScheme("sms");
receiveFilter.setPriority(1000);
messageReceiver = new MessageReceiver();
registerReceiver(messageReceiver, receiveFilter);
}
@Override
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(messageReceiver);
}
class MessageReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
Log.d("fuck", "fuck!!!!");
Toast.makeText(MainActivity.this, "You got a message", Toast.LENGTH_SHORT).show();
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage messages = null;
for (Object object : pdus){
messages = SmsMessage.createFromPdu((byte[]) object, android.provider.Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
}
String address = messages.getOriginatingAddress();
sender.setText(address);
content.setText(messages);
}
}
}
提取短信内容的部分根据新的api有所不一样,但是不影响接受广播。
可以确定的是:Mainfest中声明过 android.permission.RECEIVE_SMS 权限;
广播接收器已经注册过;
应用的权限也打开了;
但无论如何就是接受不到广播,百度无果,大都是说权限,有个说道看schema,尝试无果,优先级设为1000,尝试无果,难道是系统默认的短信应用拦截了这个广播?我想也不应该,系统默认应用有自己的广播为什么要拦截其他广播。苦思了一晚上没有结果,希望有大牛给解答,感激万分;
闭关修行中......