1

我使用广播接收器来监听当前的 wifi 状态。因此,它将当前状态设置为切换按钮 (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;

    }
    }
};

应用程序启动但工具按钮没有任何反应。TelephonyManager 是错误的方法吗?连接管理器?

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

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

4

1 回答 1

-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);
}
于 2012-07-19T09:11:44.323 回答