Как отслеживать сообщения в Android?

Я хочу разработать приложение, которое отслеживает отправленные / полученные SMS-сообщения. Я имею в виду, что когда пользователь отправляет сообщение со своего устройства, детали сообщения должны быть сохранены в таблице, предоставленной мной. Точно так же, когда устройство получает какое-либо SMS, оно также должно быть сохранено в таблице, предоставленной мной.

Обратите внимание, что пользователь использует приложение Android по умолчанию для отправки сообщений. Я имею в виду, что я не интегрирую свое приложение с приложением сообщений по умолчанию. Мне просто нужно отслеживать все сообщения, отправленные из этого приложения, поскольку Android отслеживает все отправленные сообщения в папке Отправленные своего приложения сообщений.

Как мне это сделать? Пожалуйста помогите. Мне не нужны ответы, но мне нужна подсказка, чтобы сделать это.

Пожалуйста, не предлагайте читать сообщения из папок «Входящие» и «Исходящие» и т. Д. Потому что я хочу сохранять сообщения, когда пользователь отправляет / получает их. Не после того, как отправляет или получает его.


person Chandra Sekhar    schedule 06.06.2012    source источник
comment
Что вы пробовали и с какой проблемой столкнулись? Просто будь проще.   -  person Andro Selva    schedule 06.06.2012
comment
@AndroSelva Я понятия не имею, как это сделать. Я не хочу ответа, но мне нужна подсказка.   -  person Chandra Sekhar    schedule 06.06.2012
comment
@Mido Я не хочу читать сообщения из папки "Входящие" и показывать их. Я хочу сохранить сообщение, когда пользователь его отправит.   -  person Chandra Sekhar    schedule 06.06.2012
comment
Я думаю, что в этом [сообщении] [1] есть фрагменты кода того, что вы ищете. [1]: stackoverflow.com/questions/848728/   -  person dotmido    schedule 06.06.2012


Ответы (2)


Это легко сделать с помощью широковещательного приемника, который напишет в вашем манифесте:

изменить: похоже, работает только для SMS_RECEIVED, см. этот поток

<receiver android:name=".SMSReceiver"  android:enabled="true">
 <intent-filter android:priority="1000">
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
      <action android:name="android.provider.Telephony.SMS_SENT"/>
 </intent-filter>
</receiver>

И разрешение:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

Затем создайте приемник, например:

public class SMSReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
       if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
    //do something with the received sms        
       }else  if(intent.getAction().equals("android.provider.Telephony.SMS_SENT")){
            //do something with the sended sms
     }
  }
}

Обработка входящего смс может выглядеть так:

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

Если вы хотите предотвратить отправку SMS-сообщений в Commen InBox, вы можете добиться этого с помощью:

abortBroadcast();
person 2red13    schedule 06.06.2012
comment
Я просто хочу подтвердить, что когда пользователь пытается отправить сообщение из приложения сообщений по умолчанию, Android вызовет мой класс Receiver? - person Chandra Sekhar; 06.06.2012
comment
извините, я создаю приложение, чтобы быть уверенным, и я получаю только действие SMS_RECEIVED, я не знаю почему ... я протестирую его - person 2red13; 06.06.2012
comment
stackoverflow.com/questions/990558 / - person 2red13; 06.06.2012
comment
Спасибо за ценные ответы, проверьте и дайте мне знать, как отслеживать отправку сообщений. - person Chandra Sekhar; 06.06.2012
comment
может быть полезно: stackoverflow .com / questions / 5561371 / - person 2red13; 08.06.2012
comment
android.provider.Telephony.SMS_SENT не существует. - person powder366; 29.05.2016

Пожалуйста, не вызывайте abortBroadcast (), вы запретите другим приложениям получать заказанную трансляцию SMS_RECEIVED. Это плохое поведение, это не то, о чем андроид. Я не понимаю, почему Google даже позволяет разработчику прерывать трансляцию системных намерений, таких как SMS.

person Noam Segev    schedule 17.05.2013
comment
Эта вещь abortBroadcast позволяет нам создавать программы для блокировки входящих звонков или смс. Я думаю, что это хорошая вещь, которую можно использовать как плохую, как и многие другие вещи. Люди могут использовать ручку, чтобы убить, давай прекратим строить ручки. - person Lucas Eduardo; 03.02.2015
comment
Я согласен. Это очень полезно для множества хороших функций. Вы не должны прерывать каждое входящее SMS, но мой получатель может решить: это SMS для меня, поэтому прервите рассылку, иначе позвольте ему пройти - person 2red13; 31.05.2016