短信收到没有通知

我想在我的应用程序中收到短信,但我不希望我的Android显示关于该事件的通知。 algorithm:

1)接收短信(没关系)

2)如果这是一个特殊的内容格式(为我的应用程序)的短信 – 处理它与我的应用程序,并不显示通知。

3)如果这是一个简单的消息 – 我不想处理它,所以必须显示通知。

我试图使用一个有序的广播,但它没有帮助。 在某处,我读到SMS_RECEIVE的广播没有订购,但我看到了一些应用程序,它可以在没有通知的情况下接收短信。

有没有人可以帮助我,或给我正确的方法来解决这个问题?

谢谢。

更新:调用boradcast中的abortBroadcast()并没有帮助

Solutions Collecting From Web of "短信收到没有通知"

在你的intent-filter中设置优先级

<intent-filter android:priority="100"> /*your receiver get high priority*/ 

//在广播接收器中

  if (keyword_match) { // Stop it being passed to the main Messaging inbox abortBroadcast(); } 

这应该可以通过注册您的应用程序来接收短信,然后当您检测到您的消息已经到达时使用abortBroadcast()。 你说abortBroadcast()不起作用 – 是你的SMS接收器处理的SMS吗?

对于其他人想要这样做,请继续阅读…

首先,在您的AndroidManifest.xml中声明SMS接收器,并确保应用程序有权接收SMS消息。

  <receiver android:name="mypackage.SMSReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> <uses-permission android:name="android.permission.RECEIVE_SMS" /> 

以下是处理SMS消息的一些示例代码:

 public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); Object[] pdus = (Object[])extras.get("pdus"); for (Object pdu: pdus) { SmsMessage msg = SmsMessage.createFromPdu((byte[])pdu); String origin = msg.getOriginatingAddress(); String body = msg.getMessageBody(); // Parse the SMS body if (isMySpecialSMS) { // Stop it being passed to the main Messaging inbox abortBroadcast(); } } } } 

你不应该这样做。 其他应用可能需要或需要接收SMS_RECEIVED广播。 中止它会中断第三方应用程序正常运行。 这是一个糟糕的编程方式。 你应该只中止你创build的广播,而不是系统广播。 我不知道为什么Android操作系统可以让你这样做。

不知道我是否确切地知道你正在做什么,但从我了解你只是想知道如何不发送通知?

你为什么不能做:

 If(instance 2){ //do your processing }else{ //send notification } 

如果你的意思是你想阻止操作系统播放它,那么你可能会不走运,因为我不相信你能做到这一点

哟需要android:优先级属性的工作

 <intent-filter android:priority="1"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> 

你犯了一个错误,因为你解雇了abortBroadcast(); 如果您的特殊消息如此,消息广播被中止,因此短信通知不显示,并且短信不保存在收件箱中,如果您收到特殊消息,您必须在“onRecive”中创build自己的通知。 例:

  public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); Object[] pdus = (Object[])extras.get("pdus"); for (Object pdu: pdus) { SmsMessage msg = SmsMessage.createFromPdu((byte[])pdu); String origin = msg.getOriginatingAddress(); String body = msg.getMessageBody(); // Parse the SMS body if (isMySpecialSMS) { // Stop it being passed to the main Messaging inbox abortBroadcast(); NotificationManager notificationManager = (NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.ic_launcher, "New Message (My Messaging app)", System.currentTimeMillis()); // Uses the default lighting scheme notification.defaults |= Notification.DEFAULT_LIGHTS; // Will show lights and make the notification disappear when the presses it notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS; Intent notificationIntent = new Intent(context, SplashActivity.class); PendingIntent pendingIntent =PendingIntent.getActivity(context, 0, new Intent(context, SplashActivity.class), 0); Log.i("Wakeup", "Display Wakeup"); PowerManager pm = (PowerManager)context.getApplicationContext().getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "Phone WakeUp"); wakeLock.acquire(); notification.setLatestEventInfo(context, "My Messaging App(New Message)",msg, pendingIntent); //notification.sound. notification.defaults |= Notification.DEFAULT_SOUND; notificationManager.notify(9999, notification); } else{ //Continue Broadcasting to main android app } } } } 

我希望这会解决你的问题