通过电话支持的任何方法,即GSM或CDMA(不是SIP)。我已经尝试过使用ConnectivityManager,但TYPE_MOBILE的NetworkInfo似乎返回了!连接到wifi时IsConnected,尽管我有一个完整的信号。
我想知道是否可以打电话,所以我猜想TelephonyManager.getDataState不合适。
(不能再发布7小时)
看来我是在正确的地方,只是没有完全检查正确的方法。事实上,似乎只有一个TYPE_连接(即TYPE_MOBILE,TYPE_WIFI)将返回IsConnected(),因此我应该检查连接是否是IsAvailable()。我使用启用和禁用的移动数据对此进行了测试,并且在两种情况下都给出了正确的结果(即:当我有移动信号时为true,否则为false;无论是否启用移动数据)。
注意:要禁用移动数据,请在ICS转到设置 - >无线&网络 - >更多 - >移动网络 - >数据已启用(取消选中)。
答案 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>