4

Androidで電話サービスの状態(IN_SERVICE、OUT_OF_SERVICE、EMERGENCY_ONLY、POWER_OFF)を取得する方法を知っている人はいますか?

変更を識別するブロードキャストレシーバーがあることを望んでいましたが、何も見つかりません。リスナーがあることは知っていますが、WakefulIntentService (by thecommonsguy) を使用してサービスとして実行されるため、アプリからそれを使用する方法がわかりません。

バッテリー レベルのようなもの (つまり、BATTERY_LOW、BATTERY_OKAY) を使用するのは非常に簡単ですが、電話サービスの変更について同様のことを行うことはできません。

4

2 に答える 2

2

受信機を登録する

public static final String ACTION_SERVICE_STATE_CHANGED = "android.intent.action.SERVICE_STATE";

受信機に興味がある場合は、Android ソースからの以下の小さなハックを使用するだけです

public void onReceive(Context context, Intent intent) {
    int state = intent.getExtras().getInt("state");
    if(state == ServiceState.STATE_IN_SERVICE)
    {
        //Do whatever you want
    }
    }

サービス状態クラスのソースを確認 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/telephony/ServiceState.java#ServiceState.setFromNotifierBundle%28android .os.バンドル%29

于 2012-04-04T04:40:09.280 に答える
0

独自のBroadcastReceiverを作成できます。受信者は接続の変更を受信し、変更について目的のインスタンスに通知します(たとえば、独自のCommunicationManager)。

public class ConnectivityReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Log.i(getClass().getName(), "A change in network connectivity has occurred. Notifying communication manager for further action.");
    NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
    if(info != null) {
        Log.v(getClass().getName(), "Reported connectivity status is " + info.getState() + ".");
    }
    CommunicationManager.updateConnectivityState(); // Notify connection manager
}

}

たとえば、ここでは、接続の変更について通知されるCommunicationManagerインスタンスを次に示します。

protected static void updateConnectivityState()
{
    boolean isConnected = false;
    if (_connec != null && (_connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(_connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){ 
        isConnected = true;
        Log.i(CommunicationManager.class.getName(), "Device is connected to the network. Online mode is available.");
    }else if (_connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED ||  _connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) {             
        isConnected = false;
        Log.w(CommunicationManager.class.getName(), "Device is NOT connected to the network. Offline mode.");
    }
    _isConnected = isConnected;
}

接続の可用性の詳細については、 NetworkInfoクラスを確認してください。

マニフェストにACCESS_NETWORK_STATEパーミッションを登録することを忘れないでください。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

これがお役に立てば幸いです。よろしく

于 2011-01-30T23:55:16.213 に答える