簡體   English   中英

無法注冊廣播接收器

[英]Unable to register broadcast receiver

我正在嘗試使用廣播接收器檢測互聯網連接我已經動態注冊了廣播接收器但是當應用程序啟動時它顯示以下錯誤:

 java.lang.IllegalArgumentException: Receiver not registered: com.app.qrius.ConnectivityReceiver@3240fd8

我想重定向到另一個在沒有互聯網連接時不顯示網絡消息的活動。

下面是我的代碼:

連接接收器.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

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();
        }
    }
};

}

有人請讓我知道我做錯了什么,任何幫助將不勝感激。

謝謝

您需要將其添加到 AndroidManifest.xml

如同:

        <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>

您應該如下更改您的活動,以便以編程方式registerunregister廣播接收器。 您可以為此使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM