You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API31使用BroadcastReceiver时出现ClassCastException闪退问题求助

问题根因

从崩溃日志的java.lang.ClassCastException: com.example.4.MainActivity cannot be cast to android.app.Activity可以直接定位核心问题:
你在AndroidManifest里把MainActivity声明为启动Activity,但是你的MainActivity实际继承的是BroadcastReceiver广播接收器类,不是android.app.Activity子类,系统启动应用时尝试将它转为Activity类失败,直接触发闪退。
附加问题:你把同一个类同时注册为Activity和BroadcastReceiver,逻辑完全混乱,且Activity对应的布局文件里配置了onClick点击事件,广播接收器类里根本没有对应的broadcastIntent方法,就算绕过闪退后续也会报错。

修复步骤
  • 第一步:拆分类,不要把Activity和BroadcastReceiver逻辑写在同一个类里
    新建单独的广播接收器类MyBroadcastReceiver.java,把原来MainActivity里的广播逻辑移过去:
package com.example.4;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
    }
}
  • 第二步:重写MainActivity,让它正确继承Activity基类,补充布局加载和广播发送逻辑:
package com.example.4;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 加载你编写的activity_main布局
        setContentView(R.layout.activity_main);
    }

    // 对应布局里按钮的onClick属性,实现自定义广播发送逻辑
    public void broadcastIntent(View view) {
        Intent intent = new Intent();
        intent.setAction("com.tutorialspoint.CUSTOM_INTENT");
        sendBroadcast(intent);
    }
}
  • 第三步:修改AndroidManifest.xml,修正组件注册配置
    1. 保留MainActivity的Activity注册,删除原来的tools:ignore="Instantiatable配置(修复后该警告会自动消失,无需手动忽略)
    2. 把原来注册的广播接收器的name改成你新建的MyBroadcastReceiver
      修正后的完整Manifest代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.4">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.4">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".MyBroadcastReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="com.tutorialspoint.CUSTOM_INTENT">
                </action>
            </intent-filter>
        </receiver>
    </application>

</manifest>

修改完成后重新编译运行即可正常启动应用,点击「Broadcast Intent」按钮就能触发广播弹出对应提示,不会再出现闪退问题。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:27:03