我想知道如何使用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"/>
答案 0 :(得分:3)
TelephonyManager.ACTION_PHONE_STATE_CHANGED
似乎不起作用,因为我可以阅读in TelephonyManager class description它只会通过呼叫触发,但不会触发网络或移动数据。
而不是这个,我建议你尝试设置一个监听器。它会是这样的:
1)使用TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE)
2)使用tm.listen(myCustomPhoneStateListener, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
3)一旦你有了监听器,你就可以向你的BroadcastReceiver发送自定义意图了,如果你还想这样做的话。