2013-09-20 5 views
1

Недавно я был заинтересован в разработке Android, и друг дал мне книгу «Разработка приложений для Android для чайников». В этой книге есть пример приложения «Режим беззвучного переключения». Позже там он учит вас создавать виджет главного экрана для приложения. Я точно набрал все из книги, но все равно дает мне ошибку, уведомляющую меня о том, что метод onReceive() никогда не вызывается. Вот код: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; 
    } 
} 
} 

ответ

2

У вас есть опечатка, это onReceive() и не onRecieve(). Написать это так:

public void onReceive(Context context, Intent intent) 

Это хороший пример того, почему мы должны всегда использовать @Override аннотацию, это упрощает поиск ошибок, таких, как этот.

+0

Yup, используя @Override, нашел бы это во время компиляции. –

+0

Как ни странно, в опубликованном коде '@ Override' * есть * там ... – Geobits

+0

* face slap * Большое спасибо. Ха-ха, я потратил около 2 часов, пытаясь понять это – Jfish7

Смежные вопросы