[英]onReceive() method is never called
Recently I have been interested in Android Development and a friend gave me the book "Android Application Development for Dummies". 最近,我对Android开发感兴趣,一个朋友给我写了“针对傻瓜的Android应用程序开发”一书。 In the book, there is a example app entitled Silent Toggle Mode.
本书中有一个示例应用程序,名为“静音切换模式”。 Later on there it teaches you to make a home screen widget for the app.
稍后,它教您制作该应用程序的主屏幕小部件。 I have typed in everything from the book exactly but it still gives me an error notifying me that the onReceive() method is never called.
我已经完全输入了本书中的所有内容,但仍然给我一个错误,通知我从未调用过onReceive()方法。 Here is the code:
这是代码:
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;
}
}
}
You have a typo, it's onReceive()
and not onRecieve()
. 您有一个错字,它是
onReceive()
而不是onRecieve()
。 Write it like this: 像这样写:
public void onReceive(Context context, Intent intent)
This is a good example of why we should always use the @Override
annotation, it simplifies finding bugs such as this one. 这是一个很好的例子,说明了为什么我们应该始终使用
@Override
注释,它简化了查找此类错误的过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.