BroadcastReceiver用于监听移动数据状态

时间:2012-07-19 07:43:37

标签: java android mobile android-broadcastreceiver

我使用广播接收器来收听当前的wifi状态。 因此它将当前状态设置为togglebutton(setText)的文本(连接,连接,禁用,...)。

一切正常!

但现在我想对移动数据状态做同样的事情。

所以我使用TelephonyManager来设置接收器:

this.registerReceiver(this.DataStateChangedReceiver,
new IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED));

然后我从wifi接收器复制代码并编辑它:

private BroadcastReceiver DataStateChangedReceiver
= new BroadcastReceiver()
{

    @Override
       public void onReceive(Context context, Intent intent) 
    {
        // TODO Auto-generated method stub


    int extraDataState = intent.getIntExtra(TelephonyManager.EXTRA_STATE ,
    TelephonyManager.DATA_DISCONNECTED);

    switch(extraDataState){
    case TelephonyManager.DATA_CONNECTED:
        data_toggle.setChecked(true);


     break;

    case TelephonyManager.DATA_DISCONNECTED:
        data_toggle.setChecked(false);


     break;

    case TelephonyManager.DATA_CONNECTING:
        data_toggle.setChecked(true);


     break;

    case TelephonyManager.DATA_SUSPENDED:
        data_toggle.setChecked(true);


     break;

    }
    }
};

应用程序启动但是toogleButton没有任何反应.. TelephonyManager是错误的方法吗? ConnectivityManager?

我想设置一个onclicklistener来打开/关闭移动数据。

如何做到这一点是下一个问题..

1 个答案:

答案 0 :(得分:-1)

在我的工作中,我使用了ACTION_SCREEN_ON和_OFF的技巧......所以,诀窍是这样的......你在Receiver.class中创建布尔变量,然后在连接状态是改变....然后在服务(或活动),你有意图去做什么.....

    private boolean screenOff; 
@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        screenOff = true;
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        screenOff = false;
    }
    Intent i = new Intent(context, InternetService.class);
    i.putExtra("screen_state", screenOff);
    context.startService(i);
}