gpt4 book ai didi

java - "properly"接到电话时如何发送短信?

转载 作者:行者123 更新时间:2023-11-30 04:22:51 27 4
gpt4 key购买 nike

我正在尝试让 Android 服务监听来电,当确实有来电时,获取来电号码并向其发送短信。

在我的服务中,我制作了一个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"));

这在我的手机上运行良好,但在其他人的手机上,它有时喜欢在 PhoneStateListener 中的 RINGIDLE 之间来回切换几次,然后再“发送” “.. 手机实际上说应用程序正在尝试发送多条短信,并询问用户是否可以。当他们点击是时,它会再次询问。

为了让它变得更好,它从不实际上也发送短信..

在另一部手机上,它根本不会执行此操作。另一部手机将执行 Action 并且 logcat 与我的相同。它实际上说它已发送,但收件人永远收到短信..

它应该是某种自动回复服务,我想尝试让它至少在 Froyo、Gingerbread 和 Ice Cream Sandwich 上运行。

顺便说一句,它在我的身上 100% 有效:
Galaxy Nexus (toro) (Android 4.0.3)
Droid 1 (sholes) (Android 2.3.7)
HTC Thunderbolt (mecha) (Android 2.3.7)

但是,如果是我 friend 的:
Nexus S 4G (crespo4g) (Android 4.0.3)
或者我其他 friend 的
Galaxy Nexus (toro) (Android 4.0.3)

工作..

我真的不明白的是,我的 friend 和我用的是同一部手机,但它不能用..

我觉得这个代码实现是成功还是失败,想知道是否有人有一些见解可以提供帮助。

欣赏!

最佳答案

我想我明白了。我最终做的是在最初接到电话后 30 秒放置一个调用 RunnableHandler。这让电话有时间完成电话(假设它在你的口袋里)然后干净利落地发送短信..

我希望这是我遇到的唯一问题,但它现在似乎适用于我的 friend Galaxy Nexus (toro)..

希望这能帮助其他想知道这个的人..

干杯!

关于java - "properly"接到电话时如何发送短信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9005617/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com