[英]Unable to register broadcast receiver
I am trying to detect internet connectivity using broadcast receiver I have registered broadcast receiver dynamically but when app launches it is showing error below:我正在尝试使用广播接收器检测互联网连接我已经动态注册了广播接收器但是当应用程序启动时它显示以下错误:
java.lang.IllegalArgumentException: Receiver not registered: com.app.qrius.ConnectivityReceiver@3240fd8
I want to redirect to another activity which shows not network message when there is no internet connection.我想重定向到另一个在没有互联网连接时不显示网络消息的活动。
Below is my code:下面是我的代码:
ConnectivityReceiver.java连接接收器.java
public class ConnectivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if(networkInfo != null){
Toast.makeText(context,"On",Toast.LENGTH_SHORT).show();
}
else{
Intent i = new Intent(context,Network.class);
context.startActivity(i);
((Activity)context).finish();
}
}
MainActivity.java MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
protected void onResume() {
LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
super.onResume();
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
// Get extra data included in the Intent
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if(networkInfo != null){
Toast.makeText(context,"On",Toast.LENGTH_SHORT).show();
}
else{
// Toast.makeText(context,"Off",Toast.LENGTH_SHORT).show();
Intent i = new Intent(context,Network.class);
context.startActivity(i);
((Activity)context).finish();
}
}
};
}
Someone please let me know what I am doing wrong any help would be appreciated.有人请让我知道我做错了什么,任何帮助将不胜感激。
THANKS谢谢
You would need to add it to the AndroidManifest.xml您需要将其添加到 AndroidManifest.xml
Similar to:如同:
<receiver
android:name=".BatteryPowerBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
<action android:name="android.intent.action.BATTERY_LOW" />
<action android:name="android.intent.action.BATTERY_OKAY" />
<action android:name="android.intent.action.DOCK_EVENT" />
</intent-filter>
</receiver>
You should change your activity as below for programmatically register
and unregister
broadcast receiver.您应该如下更改您的活动,以便以编程方式
register
和unregister
广播接收器。 You can use LocalBroadcastManager
for this.您可以为此使用
LocalBroadcastManager
。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
protected void onResume() {
// Register to receive messages.
// We are registering an observer (mMessageReceiver) to receive
// Intents
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, intentFilter);
super.onResume();
}
@Override
protected void onPause() {
// Unregister since the activity is paused.
LocalBroadcastManager.getInstance(this).unregisterReceiver(
mMessageReceiver);
super.onPause();
}
// Our handler for received Intents. This will be called whenever an Intent
// with an action named "custom-event-name" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
// Get extra data included in the Intent
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if(networkInfo != null){
Toast.makeText(context,"On",Toast.LENGTH_SHORT).show();
}
else{
Intent i = new Intent(context,Network.class);
context.startActivity(i);
((Activity)context).finish();
}
}
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.