Вызвано: java.lang.ClassCastException: com.bustracker.MainActivity не может быть приведен к android.content.BroadcastReceiver

У меня есть класс MainActivity, который содержит BroadcastReceiver для захвата системного вещания (интернет-соединение и результат сканирования Wi-Fi). Я столкнулся с проблемой, что широковещательная рассылка интернет-соединения принимается и отображается в виде тоста, но из-за того, что не достигается условие "if (intent.getAction(). Equals(android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))" программа. У кого-нибудь есть идея, где проблема? Что-то не так с определением получателя в манифесте?

04-08 23:16:34.319: E/AndroidRuntime(13291): FATAL EXCEPTION: main
04-08 23:16:34.319: E/AndroidRuntime(13291): Process: com.bustracker, PID: 13291
04-08 23:16:34.319: E/AndroidRuntime(13291): java.lang.RuntimeException: Unable to instantiate receiver com.bustracker.MainActivity: java.lang.ClassCastException: com.bustracker.MainActivity cannot be cast to android.content.BroadcastReceiver
04-08 23:16:34.319: E/AndroidRuntime(13291):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2518)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at android.app.ActivityThread.access$1800(ActivityThread.java:161)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at android.os.Handler.dispatchMessage(Handler.java:102)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at android.os.Looper.loop(Looper.java:157)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at android.app.ActivityThread.main(ActivityThread.java:5356)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at java.lang.reflect.Method.invokeNative(Native Method)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at java.lang.reflect.Method.invoke(Method.java:515)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
04-08 23:16:34.319: E/AndroidRuntime(13291):    at dalvik.system.NativeStart.main(Native Method)
04-08 23:16:34.319: E/AndroidRuntime(13291): Caused by: java.lang.ClassCastException: com.bustracker.MainActivity cannot be cast to android.content.BroadcastReceiver
04-08 23:16:34.319: E/AndroidRuntime(13291):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2513)
04-08 23:16:34.319: E/AndroidRuntime(13291):    ... 10 more

Код деятельности:

открытый класс MainActivity расширяет ActionBarActivity {

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

}

private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(
                android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {

        } else if (intent.getAction().equals(
                android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {

        }
    }
};

protected void onResume() {
    IntentFilter conn = new IntentFilter();
    conn.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(receiver, conn);

    IntentFilter wifi = new IntentFilter();
    wifi.addAction(android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
    registerReceiver(receiver, wifi);

    super.onResume();
}

@Override
protected void onPause() {
    unregisterReceiver(receiver);
    super.onPause();
}

}

1 ответ

Решение

У тебя есть <receiver> элемент, указывающий на MainActivity,

Во-первых, это неправильно, так как MainActivity это не BroadcastReceiver, Это то, что говорит вам ваше исключение.

Во-вторых, вы также регистрируетесь на эти трансляции через registerReceiver(), Маловероятно, что вы хотите одновременно зарегистрироваться в манифесте и зарегистрироваться через registerReceiver(),

Я бы начал с комментирования <receiver> элемент (так как это явно неправильно) и исходя из этого.

Другие вопросы по тегам