簡體   English   中英

Android Broadcast接收器出現錯誤

[英]Android Broadcast receiver gives Error

還有另一個問題。 嘗試使用廣播接收器捕獲警報(警報管理器)。

使用以下代碼:package com.suncco.shangxinbao.service;

import java.util.Calendar;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

import com.suncco.shangxinbao.model.ScheduledSms;

public class SmsTimerService extends BroadcastReceiver {

public SmsTimerService(Context context, int timeoutInSeconds,
        ScheduledSms sms) {

    Intent myIntent = new Intent(context, SmsTimerService.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
            sms.getRequestCodeForListener(), myIntent, 0);
    AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 5); // should be timeoutInSeconds instead of 5
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            pendingIntent);
}

@Override
public void onReceive(Context context, Intent intent) {
    Log.w("Karl", "yay");
}

在清單中,我將此作為接收者:

    <receiver
        android:name="com.suncco.shangxinbao.service.SmsTimerService"
        android:process=":remote" />

我像這樣使我的SmsTimerService對象:

 SmsTimerService smsTimerService = new SmsTimerService(this,5,sms);

這是眾所周知的錯誤...

java.lang.RuntimeException: Unable to instantiate receiver     
com.suncco.shangxinbao.service.SmsTimerService: java.lang.InstantiationException: 
com.suncco.shangxinbao.service.SmsTimerService

由於沒有空的構造函數(例如SmsTimerService()) ,因此無法實例化接收器錯誤。 關鍵是您需要一個空的構造函數,以便在接收到意圖時創建此接收器。 如果不實現任何構造函數,也可以。 但是,如果使用參數實現構造函數,則還需要實現一個空的構造函數!

所以你可以做這樣的事情。 請注意,創建意圖時,我沒有研究您實際上想要做什么。

public class SmsTimerService extends BroadcastReceiver {

    private void doAction(Context context, int timeoutInSeconds, ScheduledSms sms) {
        Intent myIntent = new Intent(context, SmsTimerService.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
        sms.getRequestCodeForListener(), myIntent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.SECOND, 5); // should be timeoutInSeconds instead of         
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // you get to replace sms with something!
        doAction(context, 5, sms); // original u do - > new SmsTimerService(this,5,sms);
    }
}

暫無
暫無

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

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