0

通过电话支持的任何方法,即 GSM 或 CDMA(不是 SIP)。我尝试使用 ConnectivityManager,但 TYPE_MOBILE 的 NetworkInfo 似乎在连接到 wifi 时返回 !IsConnected,尽管我有完整的信号。

我想知道是否可以拨打电话,所以我猜 TelephonyManager.getDataState 不合适。

我的答案

(不能再发布7个小时)

看来我是在正确的地方,只是没有完全检查正确的方法。实际上,似乎只有一个TYPE_的连接(即TYPE_MOBILE,TYPE_WIFI)会返回IsConnected(),所以我应该检查连接是否IsAvailable()。我在启用和禁用移动数据的情况下对此进行了测试,并且在两种情况下都给出了正确的结果(即:当我有移动信号时为真,当我没有移动数据时为假;启用和不启用移动数据)。

注意:要禁用移动数据,请在 ICS 中转到设置 -> 无线和网络 -> 更多 -> 移动网络 -> 启用数据(取消选择它)。

4

2 回答 2

0

首先检查 PackageManager hasSystemFeature(PackageManager.FEATURE_TELEPHONY) 然后你可以使用 TelephonyManager getSimState()

于 2012-04-23T04:45:49.380 回答
0

您应该创建一个 BroadcastReceiver:在 TelephonyManager.CALL_STATE_OFFHOOK 的情况下:检查先前的状态是 CALL_STATE_RINGING 还是 CALL_STATE_IDLE(例如通过在两种情况下设置不同的标志)。在后一种情况下,继续打开您的应用程序,:::

public class CallReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                TelephonyManager.EXTRA_STATE_RINGING)) {

                // Phone number 


                // Ringing state
                // This code will execute when the phone has an incoming call
        } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                TelephonyManager.EXTRA_STATE_IDLE)
                || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                        TelephonyManager.EXTRA_STATE_OFFHOOK)) {

            // This code will execute when the call is answered or disconnected
        }

    }
}

您应该注册您的应用程序以在清单中收听这些意图:

<receiver android:name=".CallReciever">
<intent-filter>
    <action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
于 2012-04-23T04:47:04.047 回答