有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案