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

Android闹钟应用崩溃求助:Google Mobile Ads SDK初始化错误

问题分析与解决

一、应用崩溃的直接原因

你的应用启动即崩溃,是因为Google移动广告SDK初始化未完成——项目引入了AdMob相关依赖,但未在AndroidManifest.xml中配置有效的App ID。哪怕你的闹钟应用不需要广告,只要依赖了该库,就必须完成配置。

解决办法二选一:

  • 配置AdMob App ID:打开AndroidManifest.xml,在<application>标签内添加元数据(测试阶段可使用官方测试ID ca-app-pub-3940256099942544~3347511713):
<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="你的AdMob App ID"/>
  • 移除广告依赖:若项目根本不需要广告功能,直接在build.gradle(Module level)中删除com.google.android.gms:play-services-ads相关依赖行,同步项目即可。

二、闹钟功能的逻辑缺陷(提前规避后续问题)

除了崩溃问题,你的闹钟触发逻辑还有几个会导致功能失效的问题:

  1. 时间格式不匹配:TextClock在12小时制下会显示AM/PM标识(比如3:45 PM),但你拼接的hour+":"+minute无此部分,永远无法匹配。
  2. 仅单次检查时间:当前只有点击按钮的瞬间会检查时间,之后即使到了设定时间也不会触发铃声,需要持续监听时间变化。
  3. 铃声对象生命周期问题:onCreate中初始化的Ringtone对象,长时间后台运行可能被系统回收,建议在需要播放时再获取。

优化后的逻辑示例:

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

    TimePicker picker = findViewById(R.id.timePicker);
    Button btn = findViewById(R.id.button);
    TextView txt = findViewById(R.id.textView);

    picker.setIs24HourView(false);
    Handler timeCheckHandler = new Handler(Looper.getMainLooper());
    Runnable timeChecker = new Runnable() {
        @Override
        public void run() {
            // 获取设定的时间
            int targetHour = picker.getHour();
            int targetMinute = picker.getMinute();
            // 获取当前系统时间
            Calendar now = Calendar.getInstance();
            int currentHour = now.get(Calendar.HOUR_OF_DAY);
            int currentMinute = now.get(Calendar.MINUTE);
            
            // 时间匹配则播放铃声
            if (currentHour == targetHour && currentMinute == targetMinute) {
                Ringtone alarmRingtone = RingtoneManager.getRingtone(
                    getApplicationContext(), 
                    RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)
                );
                if (alarmRingtone != null && !alarmRingtone.isPlaying()) {
                    alarmRingtone.play();
                }
            }
            // 每分钟检查一次
            timeCheckHandler.postDelayed(this, 60 * 1000);
        }
    };

    btn.setOnClickListener(v -> {
        // 点击按钮后启动定时检查
        timeCheckHandler.removeCallbacks(timeChecker);
        timeCheckHandler.post(timeChecker);
        txt.setText("闹钟已启动");
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:25:19