广播接收器获取服务状态信息
问题描述:
有谁知道在android中获取电话服务状态(IN_SERVICE,OUT_OF_SERVICE,EMERGENCY_ONLY,POWER_OFF)的方法。广播接收器获取服务状态信息
我希望有一个广播回忆者来识别这些变化,但我找不到任何东西。我知道有一个监听器,但我不知道如何从我的应用程序使用它,因为它使用WakefulIntentService(bycommonsguy)作为服务运行。
像电池电量(即BATTERY_LOW,BATTERY_OKAY)这很容易,但我不能为电话服务的变化制定类似的事情。
答
你可以编写自己的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类以获取有关连接可用性的更多详细信息。
不要忘了在你的清单中注册许可权在未经许可:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
我希望这有助于。问候
答
当你在你接收器的意图只是使用下面的小黑客从Android的源服务状态类的
public void onReceive(Context context, Intent intent) {
int state = intent.getExtras().getInt("state");
if(state == ServiceState.STATE_IN_SERVICE)
{
//Do whatever you want
}
}
检查源注册一个接收器
public static final String ACTION_SERVICE_STATE_CHANGED = "android.intent.action.SERVICE_STATE";
为什么这是低调?有任何想法吗? – cbrulak 2012-08-09 03:06:16
可能因为ServiceState不是NetworkState。 ServiceState是电话无线电的状态,而NetworkState会为您提供数据连接的状态(可能是wifi,wimax ...即不是电话网络) – 2012-12-17 16:39:27