0

電話がサポートする方法、つまり GSM または CDMA (SIP ではない) を介して。ConnectivityManager を使用してみましたが、完全な信号があるにもかかわらず、wifi に接続すると TYPE_MOBILE の NetworkInfo が !IsConnected を返すようです。

電話をかけることができるかどうかを知りたいので、 TelephonyManager.getDataState は適切ではないと思います。

私の答え

(さらに7時間投稿できません)

正しい方法を完全にチェックしていないだけで、私は正しい場所にいたようです。実際、IsConnected() を返す TYPE_ 接続 (つまり、TYPE_MOBILE、TYPE_WIFI) は 1 つのみであるように思われるため、代わりに接続 IsAvailable() を確認する必要があります。モバイルデータを有効または無効にしてこれをテストしたところ、どちらの場合でも正しい結果が得られました (つまり、モバイル信号がある場合は true、ない場合は false; モバイルデータが有効な場合とない場合の両方)。

注: モバイル データを無効にするには、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 に答える