Я пытаюсь иметь 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 работать с моим другом с тем же телефоном, что и я ..
Я чувствую, что эта реализация кода является хитом или пропуском, и было интересно, есть ли у кого-нибудь проницательность, чтобы помочь.
Цените это!
Извините, что поставил старый вопрос, но этот вопрос интригует! Вы когда-нибудь узнали, почему sms не отправили? Может быть, потому что вы не можете отправить смс во время разговора? – jtnire
Кроме того, были ли все телефоны с использованием GSM? Кроме того, как вы знаете, что сообщение было отправлено? Как я вижу, вы не проверяете ACTIVITY.RESULT_OK в своем широковещательном приемнике ...... – jtnire