2010-08-22 2 views

ответ

0

Для Android ответ - нет. Вы можете реализовать BroadcastReceiver, который вызывается всякий раз, когда устройство получает текстовое SMS-сообщение, но не может заставить другие приложения (например, встроенное приложение обмена сообщениями) получать их тоже.

1

В Android вы можете зарегистрировать BroadcastReceiver, чтобы получать уведомления о появлении SMS, пометить сообщение как прочитанное в поставщике содержимого SMS, а затем удалить это конкретное сообщение от поставщика контента. Это предотвратит возможность чтения другими сообщениями после того, как вы их удалили, и никаких уведомлений не будет показано в пространстве уведомлений. Тем не менее, я понятия не имею, что произойдет с приложениями, которые получают намерение, указывающее, что сообщение получено, но затем не может получить к нему доступ в базе данных. Это может привести к непредсказуемому поведению в результате ряда условий гонки.

0

Для Android ответ Да.

android.provider.Telephony.SMS_RECEIVED Событие - это упорядоченная трансляция, и вы можете настроить приоритет. Это означает, что ваше приложение получит событие перед всеми остальными. И вы можете отменить трансляцию для остальных вещательных приемников.

Вы можете найти более подробную информацию здесь: stackoverflow.com/can-we-delete-an-sms-in-android-before-it-reaches-the-inbox/

0

В Android, как только вы получили сообщение SMS в приложении, вы можете использовать пристальный объект, чтобы передать информацию о сообщении в другой деятельности/приложение для дальнейшей обработки , Если вам нужно передать сообщение в свое приложение, используйте метод sendBroadcast() для трансляции объекта Intent. В вашей деятельности вам просто нужно использовать метод registerReceiver() для прослушивания широковещательной передачи.

Надеюсь, это поможет! Wei-Meng Lee

1

Да. Это возможно в Android. Я делаю это в приложении, которое я разрабатываю. Что вам нужно сделать, это:

public class SMSService extends BroadcastReceiver { 
public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
private String phoneNumber; 
private String sms; 
private Context context; 

@Override 
public void onReceive(Context context, Intent intent) { 
    this.context = context; 
    if (intent.getAction().equals(SMS_RECEIVED)) { 
     Bundle bundle = intent.getExtras(); 
     SmsMessage[] msgs = null; 

     if (bundle != null) { 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length]; 

      for (int i = 0; i < msgs.length; i++) { 

       msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 

       // get sms message 
       sms = msgs[i].getMessageBody(); 

       // get phone number 
       phoneNumber = msgs[i].getOriginatingAddress(); 

       if (phoneNumber.equals("Some other phone number")){ 
        // the sms will not reach normal sms app 
        abortBroadcast(); 

       Thread thread = new Thread(null, 
         doBackgroundThreadProcessing, "Background"); 
       thread.start(); 
       } 

      } 
     } 
    } 
} 

private Runnable doBackgroundThreadProcessing = new Runnable() { 
    // do whatever you want 
}; 

ВАЖНО: В файле манифеста вы должны определить приоритет SMS с большим числом. Я считаю, что максимум составляет 100.

<!-- SMS Service --> 
    <service android:name=".SMSService" /> 
    <receiver android:name=".SMSService"> 
     <intent-filter android:priority="100"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
+0

Максимального значения для андроида: приоритет 1000. Смотрите здесь: http://developer.android.com/guide/topics/manifest/intent-filter-element.html –

Смежные вопросы