2012-01-25 2 views
1

Я пытаюсь иметь Android Сервис Слушайте входящий телефонный звонок, и когда он действительно возникает, возьмите входящий номер и отправьте ему текст.Как правильно отправлять sms при получении вызова?

В моей службы я сделал PhoneStateListener:

TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
PhoneStateListener listener = new PhoneStateListener() 
{ 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) 
    { 
     switch(state) 
     { 
      case TelephonyManager.CALL_STATE_IDLE: 
       Log.d(TAG, "Phone: Idle"); 
      break; 
      case TelephonyManager.CALL_STATE_RINGING: 
       Log.d(TAG, "Phone: Ringing."); 
       Log.i(TAG, "Incoming call from: " + incomingNumber); 
       sendSms(); 
      break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       Log.d(TAG, "Phone: Off Hook"); 
      break; 
     } 
    } 
}; 
tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 

Мои SendSMS() функция выглядит следующим образом:

private void sendSms() 
{ 
    SmsManager manager = SmsManager.getDefault(); 

    wakeLock.acquire(); 
    Log.d(TAG, "Wake Lock Acquired!"); 

    if (getMessageContent(getInformStatus()).length() > 160) 
    { 
     ArrayList<String> messagelist = manager.divideMessage(getMessageContent(getInformStatus())); 

     manager.sendMultipartTextMessage(getReturnAddress(), null, messagelist, null, null); 
     Log.i(TAG, "Multipart Text Message Sent!"); 
    } 
    else 
    { 
     manager.sendTextMessage(getReturnAddress(), null, getMessageContent(getInformStatus()), sentPI, null); 
     Log.i(TAG, "Text Message Sent!"); 
    } 

    wakeLock.release(); 
    Log.d(TAG, "Wake Lock Released!"); 
} 

У меня даже есть SMS_SENT Broadcast Receiver для проверьте, правильно ли отправлено текстовое сообщение, которое вызовет функцию sendSms(), если она не отправлена ​​по какой-либо причине:

resend = new BroadcastReceiver() 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     switch (getResultCode()) 
     { 
      case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
       Log.e(TAG, "Text did NOT send (GENERIC_FAILURE)"); 
       Log.i(TAG, "Attempting to resend"); 
       sendSms(); 
      break; 
      case SmsManager.RESULT_ERROR_NO_SERVICE: 
       Log.e(TAG, "Text did NOT send (NO_SERVICE)"); 
       Log.i(TAG, "Attempting to resend"); 
       sendSms(); 
      break; 
      case SmsManager.RESULT_ERROR_RADIO_OFF: 
       Log.e(TAG, "Text did NOT send (RADIO_OFF)"); 
       Log.i(TAG, "Attempting to resend"); 
       sendSms(); 
      break; 
     } 
    } 
}; 
registerReceiver(resend, new IntentFilter("android.provider.Telephony.SMS_SENT")); 

Это работает на моем телефоне штрафа, однако на телефонах других людей она любит иногда переключаться между RINGING и IDLE в PhoneStateListener несколько раз, прежде чем «отправка» .. В телефон на самом деле говорит, что приложение пытается отправить несколько текстовых сообщений и спрашивает пользователя, если все в порядке. Когда они нажимают «да», он просто спрашивает.

Чтобы сделать это лучше, это не никогда фактически посылает текстовое сообщение либо ..

На другом телефоне, он не делает это вообще .. Другой телефон будет идти через движения и LogCat идентичен моему .. это на самом деле говорит, что он посылает, но получатель никогда получает СУБ ..

это, предполагают, чтобы быть сервисом авто-ответ рода, и я хотел бы попробовать и сделать его работу по крайней мере Froyo, пряники и мороженое сэндвич ..

Кстати, он работает на 100% мой:
    Galaxy Nexus (торо) (Android 4.0.3)
    Droid 1 (Sholes) (Android 2.3.7)
    HTC Thunderbolt (механич) (Android 2.3.7)

Однако, если это мой друг:
    Nexus S 4G (crespo4g) (Android 4.0.3)
        или другой мой друг-х
    Galaxy Nexus (торо) (Android 4.0.3)

Это не работа ..

То, что я действительно не понимаю, что это Безразлично» t работать с моим другом с тем же телефоном, что и я ..

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

Цените это!

+0

Извините, что поставил старый вопрос, но этот вопрос интригует! Вы когда-нибудь узнали, почему sms не отправили? Может быть, потому что вы не можете отправить смс во время разговора? – jtnire

+0

Кроме того, были ли все телефоны с использованием GSM? Кроме того, как вы знаете, что сообщение было отправлено? Как я вижу, вы не проверяете ACTIVITY.RESULT_OK в своем широковещательном приемнике ...... – jtnire

ответ

1

Я думаю, что понял. То, что я закончил, - это положить Handler, который вызвал Runnable через 30 секунд после того, как был первоначально получен телефонный звонок. Это дало телефонное время для завершения телефонного звонка (при условии, что он был в вашем кармане), а затем отправить текстовое сообщение ..

Я надеюсь, что это единственные вопросы, которые я имел, но это, кажется, работает на моих друзьях Galaxy Nexus (торо) теперь ..

Надеется, что это поможет кому-то интересно об этом ..

Cheers!

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