0

我想知道如何使用 BroadcastReceiver 检查何时连接移动数据。

这是我到目前为止所拥有的:

    private BroadcastReceiver MobileDataStateChangedReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int state = intent.getIntExtra(TelephonyManager.EXTRA_STATE,
                TelephonyManager.DATA_DISCONNECTED);

        if (state == TelephonyManager.DATA_CONNECTED) {
            mobileStatus.setText("Connected");
        } else if (state == TelephonyManager.DATA_DISCONNECTED) {
            mobileStatus.setText("Disconnected");
        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.status_page);

    mobileStatus = (TextView) this.findViewById(R.id.textView4);

    registerReceiver(MobileDataStateChangedReceiver, new IntentFilter(
            TelephonyManager.ACTION_PHONE_STATE_CHANGED));
}

我在这里做错了什么?

我在 Wi-Fi 检查中使用了相同的概念并且效果很好?我正在使用以下权限:

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

1 回答 1

3

TelephonyManager.ACTION_PHONE_STATE_CHANGED似乎不起作用,因为正如我在 TelephonyManager 类描述中所读到的,它只在呼叫时触发,而不是在网络或移动数据时触发。而不是这个,我建议你尝试设置一个监听器。它会是这样的:

1)获取服务TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE)

2)设置一个监听器tm.listen(myCustomPhoneStateListener, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

3)一旦你有了监听器,你就可以向你的广播接收器发送自定义意图,如果你仍然想这样做的话。

于 2013-07-05T22:29:30.857 回答