簡體   English   中英

從不調用onReceive()方法

[英]onReceive() method is never called

最近,我對Android開發感興趣,一個朋友給我寫了“針對傻瓜的Android應用程序開發”一書。 本書中有一個示例應用程序,名為“靜音切換模式”。 稍后,它教您制作該應用程序的主屏幕小部件。 我已經完全輸入了本書中的所有內容,但仍然給我一個錯誤,通知我從未調用過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注釋,它簡化了查找此類錯誤的過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM