有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android广播接收器出现错误

还有一个问题。试图使用广播接收器捕捉警报(警报管理器)

使用以下代码: 包裹通讯。桑科。上心宝。服务

import java.util.Calendar;

import 安卓.app.AlarmManager;
import 安卓.app.PendingIntent;
import 安卓.content.BroadcastReceiver;
import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.util.Log;
import 安卓.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
        安卓:name="com.suncco.shangxinbao.service.SmsTimerService"
        安卓:process=":remote" />

我把我的短信服务做成这样:

 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

共 (1) 个答案

  1. # 1 楼答案

    由于没有空构造函数,例如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);
        }
    }