短信收到,不通知

时间:2011-03-21 15:54:32

标签: android sms broadcastreceiver

我想在我的应用中收到短信,但我不希望我的Android显示有关该事件的通知。算法:

  1. 收到短信(没关系)

  2. 如果这是带有特殊内容格式的短信(对于我的应用) - 使用我的应用处理它并且不显示通知。

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

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

    是否有人可以帮助我或向我展示解决此问题的正确方法?

    在广播中呼叫abortBroadcast()无效

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

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

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

首先,在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();
      }
    }
  }
}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

不确定我是否确切地知道你想要做什么,但据我所知,你只想知道如何不发送通知?

为什么你不能这样做:

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

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

答案 4 :(得分:0)

你需要android:优先级属性才能工作

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

答案 5 :(得分:0)

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

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

我希望这能解决你的问题