java如何在接到电话时“正确”发送短信?
我正在尝试一个安卓服务监听来电,当有来电时,抓取来电号码并发短信给它
在我的服务中,我做了一个电话状态监听器:
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广播接收器来检查发送的文本消息是否正确,如果出于任何原因没有发送,它将调用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("安卓.provider.Telephony.SMS_SENT"));
这在我的手机上很管用,但在其他人的手机上,它有时喜欢在“发送”之前在PhoneStateListener中的铃声和空闲之间来回切换几次。。手机实际上表示应用程序正在尝试发送多条短信,并询问用户是否可以。当他们点击yes时,它只会再次询问
为了让它变得更好,它也从来不会发送短信
在另一部手机上,它根本做不到这一点。。另一部手机会进行移动,而logcat与我的相同。。它实际上说它发送了短信,但收件人从未收到短信
它应该是一种自动响应服务,我想尝试让它至少在Froyo、姜饼和冰淇淋三明治上运行
顺便说一句,它对我的:
Galaxy Nexus(toro)(安卓4.0.3)
Droid 1(sholes)(安卓2.3.7)
HTC Thunderbolt(mecha)(安卓2.3.7)
但是,如果是我朋友的:
Nexus S 4G(crespo4g)(安卓4.0.3)
或者我其他朋友的
Galaxy Nexus(toro)(安卓4.0.3)
它不起作用
我真的不明白的是,我的朋友和我用的手机完全一样,它就不起作用了
我觉得这段代码的实现是一帆风顺的,我想知道是否有人有一些见解可以帮助我
谢谢
共 (0) 个答案