Как да проследявате съобщенията в Android?

Искам да разработя приложение, което проследява изпратените/получените SMS-и. Искам да кажа, че когато потребител изпрати съобщение от устройството си, подробностите за съобщението трябва да бъдат запазени в таблица, предоставена от мен. По същия начин, когато устройството получи някакъв SMS, той също трябва да бъде записан в таблица, предоставена от мен.

Имайте предвид, че потребителят използва приложението за съобщения по подразбиране на Android, за да изпрати съобщение. Искам да кажа, че не интегрирам приложението си с приложението за съобщения по подразбиране. Просто трябва да следя всички съобщения, изпратени от това приложение, тъй като Android следи всички изпратени съобщения в папката Изпратено съобщение на своето приложение за съобщения.

Как бих направил това? Моля, помогни ми. Не се нуждая от отговори, но имам нужда от някаква следа, за да го направя.

Моля, не предлагайте да четете съобщенията от Inbox и Outbox и т.н., защото искам да запазя съобщенията, когато потребителят ги изпраща/получава. Не след като го изпрати или получи.


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 Не искам да чета съобщенията от Inbox и да го показвам. Искам да запазя съобщението, когато потребителят го изпрати.   -  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
     }
  }
}

Обработката на входящ 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 във входящата кутия за коментари, можете да постигнете това с:

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 поръчаното излъчване. Това е лошо поведение, това не е целта на android. Не разбирам защо Google дори позволява на разработчика да прекратява излъчвания на системни намерения като SMS.

person Noam Segev    schedule 17.05.2013
comment
Това нещо abortBroadcast ни позволява да направим софтуер за блокиране на входящи обаждания или sms. Мисля, че това е нещо добро, което може да се използва като нещо лошо, както много други неща. Хората могат да използват писалка, за да убиват, нека спрем да създаваме химикалки. - person Lucas Eduardo; 03.02.2015
comment
Съгласен съм. Много е полезен за много добри функции. Не трябва да прекъсвате всеки входящ SMS, но моят приемник може да реши: Този SMS е за мен, така че прекъснете излъчването, в противен случай го оставете да премине - person 2red13; 31.05.2016