java - onReceive() 方法永远不会被调用

标签 java android

最近对Android开发很感兴趣, friend 给了我一本《Android应用开发傻瓜书》。在书中,有一个名为 Silent Toggle Mode 的示例应用程序。稍后它会教您为应用程序制作主屏幕小部件。我已经准确地输入了书中的所有内容,但它仍然给我一个错误,通知我永远不会调用 onReceive() 方法。这是代码:

package com.example.myapplication;

import android.app.Activity;
import android.app.IntentService;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.widget.RemoteViews;

public class AppWidget extends AppWidgetProvider {

@Override
public void onRecieve(Context context, Intent intent) {
    if(intent.getAction()==null) {
        context.startService(new Intent(context, ToggleService.class));
    } else {
        super.onReceive(context, intent);
    }
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    context.startService(new Intent(context, ToggleService.class));
}

public static class ToggleService extends IntentService {

    public ToggleService() {
        super("AppWidget$ToggleService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        ComponentName me=new ComponentName(this, AppWidget.class);
        AppWidgetManager mgr=AppWidgetManager.getInstance(this);
        mgr.updateAppWidget(me, buildUpdate(this));
    }
    private RemoteViews buildUpdate(Context context) {
        RemoteViews updateViews=new  RemoteViews(context.getPackageName(),R.layout.widget);
        AudioManager audioManager=(AudioManager)context.getSystemService(Activity.AUDIO_SERVICE);

        if(audioManager.getRingerMode()==AudioManager.RINGER_MODE_SILENT) {
            updateViews.setImageViewResource(R.id.phoneState,R.drawable.phone_state_normal);

            audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
        } else {
            updateViews.setImageViewResource(R.id.phoneState,R.drawable.phone_state_silent);

            audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        }
        Intent i=new Intent(this, AppWidget.class);

        PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);

        updateViews.setOnClickPendingIntent(R.id.phoneState, pi);

        return updateViews;
    }
}
}

最佳答案

您打错了,是 onReceive() 而不是 onRecieve()。像这样写:

public void onReceive(Context context, Intent intent) 

这是一个很好的例子,说明了为什么我们应该始终使用 @Override 注释,它简化了查找此类错误的过程。

关于java - onReceive() 方法永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18920333/

相关文章:

java - 尝试从 DefaultListModel 对象中删除元素

java - Android MVP 我应该在哪里安装 TextWatcher

java - 无法为 JTable 提供首选大小

java - Facebook AnE Android : Login Activity - . ApiException:代码 1:发生未知错误

android - 如果在延迟倒计时期间中断,如何重新启动处理程序延迟后进程

android - LayoutInflater 为什么从 xml 返回原始 View 的副本以及如何从 xml 获取原始 View

java - Android: OnBootReceiver: 导出的接收器不需要权限

java - validator ,Java 到 Kotlin 的翻译不正确

Android Butterknife - 在 fragment 中绑定(bind)

java - BodyEditorLoader - 读取文件时出错