如何查看是否可以拨打电话?

时间:2012-04-23 04:30:47

标签: android

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

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

我的回答

(不能再发布7小时)

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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>