想要监听手机的短信,准备通过广播去拿 但是没反应
```java
public class SmsReceiver extends BroadcastReceiver {
public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String TAG = "SmsReceiver";
public SmsReceiver() {
Log.i("TAG", "new SmsReceiver");
}
@Override
public void onReceive(final Context context, Intent intent) {
Log.i(TAG, "jie shou dao");
Cursor cursor = null;
try {
if (SMS_RECEIVED.equals(intent.getAction())) {
Log.d(TAG, "sms received!");
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
if (messages.length > 0) {
String content = messages[0].getMessageBody();
String sender = messages[0].getOriginatingAddress();
long msgDate = messages[0].getTimestampMillis();
String smsToast = "New SMS received from : "
+ sender + "\n'"
+ content + "'";
Toast.makeText(context, smsToast, Toast.LENGTH_LONG)
.show();
Log.d(TAG, "message from: " + sender + ", message body: " + content
+ ", message date: " + msgDate);
//自己的逻辑
}
}
cursor = context.getContentResolver().query(Uri.parse("content://sms"), new String[] { "_id", "address", "read", "body", "date" }, "read = ? ", new String[] { "0" }, "date desc");
if (null == cursor){
return;
}
Log.i(TAG,"m cursor count is "+cursor.getCount());
Log.i(TAG,"m first is "+cursor.moveToFirst());
}
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "Exception : " + e);
} finally {
if (cursor != null) {
cursor.close();
cursor = null;
}
}
}
filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
receiver = new SmsReceiver();
registerReceiver(receiver, filter);//注册广播接收器
service也注册了 但是来短信了就是没反应
如果您的 service 已经正确地注册了 SmsReceiver,而且您已经确保权限已正确设置,但是在接收短信时没有任何反应,那么可能有以下几个原因:
如果您仍然无法解决问题,请尝试在 onReceive 方法中添加更多的日志消息,以便更好地了解您的代码在哪里出现了问题。
您的代码似乎没有明显的问题,但是可能有以下几个方面需要注意:
1. 权限问题:监听短信需要权限。请确保您的应用程序具有读取短信的权限。您可以在AndroidManifest.xml文件中添加以下行:
<uses-permission android:name="android.permission.READ_SMS" />
2.需要动态请求权限:在Android 6.0及更高版本中,您需要在运行时请求读取短信的权限。可以在您的Activity中添加以下代码:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, READ_SMS_PERMISSION_CODE);
}
其中READ_SMS_PERMISSION_CODE是您可以自定义的常量。
3.BroadcastReceiver注册问题:您提到了在service中注册了BroadcastReceiver,但是没有提供代码。请确保您已正确注册BroadcastReceiver。可以在您的Service中添加以下代码:
SmsReceiver receiver = new SmsReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(receiver, filter);
如果仍然存在问题,建议您检查一下其他应用程序是否也在监听短信。在Android中,只允许一个应用程序同时监听短信,因此如果有其他应用程序在监听短信,您的应用程序将无法收到广播。
不知道你这个问题是否已经解决, 如果还没有解决的话: