2012-03-14 11 views
8

Próbuję wysyłać wiadomości SMS z aplikacji na Androida. Używam PendingIntent, więc mogę użyć odbiornika Broadcast, aby sprawdzić, czy wysłano go poprawnie. Ponieważ wywołanie sendTextMessage będzie wykonywane za SMS-em, muszę wysłać kilka "dodatkowych" danych, aby zidentyfikować rzeczywisty SMS, tak, że mój program broadcast może wykonać pewną pracę nad określoną wiadomością SMS.Android PendingIntent Extra

Oto mój kod wysyłania:

 String SENT = "SMS_SENT"; 

     Intent sentIntent = new Intent(SENT); 
     sentIntent.putExtra("foo", "BAR"); 
     PendingIntent sentPI = PendingIntent.getBroadcast(baseContext, 0, 
      sentIntent, 0); 

     PendingIntent deliveredPI = PendingIntent.getBroadcast(baseContext, 0, 
      new Intent(DELIVERED), 0); 

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(smsMessage.getNumber(), null, smsMessage.getText(), sentPI, deliveredPI); 

Problemem jest to, że w moim odbiorniku broadcast, to nie wydaje się czytać moje Extra "foo":

public class SMSSentBroadcastReceiver extends BroadcastReceiver { 

    @Override 
     public void onReceive(Context arg0, Intent intent) { 
     String smsID = intent.getStringExtra("foo"); 
     ...... 
     } 
    } 

smsID prostu staje się zerowa .

Mój odbiornik transmisji jest zarejestrowana tak:

baseContext.registerReceiver(new SMSSentBroadcastReceiver(), new IntentFilter("SMS_SENT")); 

Biorąc pod uwagę, że filtr zamiarem działa, co robię źle? Dlaczego nie są wysyłane również dodatki?

Każda pomoc jest doceniana. Dzięki

+0

W swoim PendingIntent.getBroadcast, jeśli przekazałeś jakiś unikalny kod żądania, czy smsID nadal ma wartość null? (np. 'PendingIntent.getBroadcast (baseContext, 99, sentIntent, 0)') – dule

+0

Doskonały! To się udało. Jeśli podasz to jako odpowiedź, przyjmuję :) Dlaczego jednak potrzebujesz unikalnego kodu żądania? Wcześniej ustawiałem to na 0, co najwyraźniej nie miało miejsca. – jtnire

Odpowiedz

14

Podejrzewam, że się zdarzyło (przynajmniej mi się to zdarzyło), jest to, że używasz intencji SMS_SENT gdzieś indziej wcześniej, w którym to czasie intencja nie ma "foo" w dodatkach . Wywołanie PendingIntent.getBroadcast z tym samym zamiarem i kodem żądania spowoduje wyświetlenie pierwotnego oczekującego zamiaru.

Jeśli rzeczywiście ma to być ten sam zamiar, musisz użyć czegoś takiego jak PendingIntent.FLAG_UPDATE_CURRENT, aby zaktualizować intencję nowymi dodatkami. Jeśli nie jest to ta sama intencja, powinien mieć inny kod żądania, tak aby nie pasował do innych intencji (dlatego zadziałało podawanie kodu unikatowego).

+0

Jestem w 100% pewien, że foo zawsze był ustawiony jako dodatkowy. Mogę jednak potwierdzić, że "ten sam" oczekujący zamiar został wywołany dwukrotnie, ponieważ dwa SMS-y próbowały zostać wysłane. Myślę, że to może być błąd w SDK ... – jtnire

+0

Nie jestem pewien, dlaczego dodatkowe nie zawsze będzie tam (dla mnie, to było tam, ale było nieprawidłowe, tj. Nieaktualne). Nie znam żadnych błędów, które by to spowodowały, zazwyczaj zakładam, że to coś, czego mi brakuje, niż coś złego w SDK :) – dule

+0

@dule, jesteś niesamowity! ten problem torturował mnie przez kilka godzin, aż znalazłem twoją odpowiedź. – neevek

Powiązane problemy