java发送广播,java – 服务器中的Android BroadcastReceiver在向其发送广播时给出空指针异常...

我的服务中有一个广播接收器,当我从我的活动发送广播以停止服务时,我收到以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.content.BroadcastReceiver.onReceive(android.content.Context, android.content.Intent)' on a null object reference

这是我的服务类:

public class PhraseService extends Service{

public static List phrases;

private Context context;

private static final String PHRASE_SERVICE_BROADCAST_ID = "com.cryogenos.safephrase.PHRASE_SERVICE_BROADCAST_ID";

private BroadcastReceiver command_broadcast_receiver;

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

this.context = getApplicationContext();

LocalBroadcastManager.getInstance(this).registerReceiver(command_broadcast_receiver, new IntentFilter(PHRASE_SERVICE_BROADCAST_ID));

Log.i("COS", "STARTED SELF");

/* Handle any command sent by the app here */

command_broadcast_receiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

Log.i("COS", "CALLED?");

try {

String command = intent.getStringExtra("command");

/* Based on the command given, perform an action */

switch (command) {

case "RESTART RECOGNIZER":

break;

case "STOP":

Toast.makeText(context, "Phrase Listener Stopped", Toast.LENGTH_SHORT).show();

stopSelf();

break;

}

}

catch (Exception e){}

}

};

Intent notif_intent = new Intent(this, Home.class);

PendingIntent pi = PendingIntent.getActivity(this, 0, notif_intent, 0);

Notification notif = new NotificationCompat.Builder(this)

.setSmallIcon(R.mipmap.ic_launcher)

.setContentTitle("Phrase Listener")

.setContentText("Listening for Phrases")

.setContentIntent(pi)

.build();

startForeground(34994, notif);

return super.onStartCommand(intent, flags, startId);

}

@Override

public void onDestroy() {

LocalBroadcastManager.getInstance(this).unregisterReceiver(command_broadcast_receiver);

super.onDestroy();

}

@Override

public IBinder onBind(Intent intent) {return null;}

}

以下是我发送广播的活动:

public class SettingsModel {

private Context context;

private static final String PHRASE_SERVICE_BROADCAST_ID = "com.cryogenos.safephrase.PHRASE_SERVICE_BROADCAST_ID";

private LocalBroadcastManager local_broadcast_manager;

public SettingsModel(Context context) {

this.context = context;

local_broadcast_manager = LocalBroadcastManager.getInstance(context);

}

public void handleSwitch(SettingsSwitch settings_switch, boolean status){

switch (settings_switch){

case POWER:

if(status) {

Intent i = new Intent(context, PhraseService.class);

context.startService(i);

}

else{

Intent i = new Intent(PHRASE_SERVICE_BROADCAST_ID);

i.putExtra("command", "STOP");

local_broadcast_manager.sendBroadcast(i);

}

break;

case VIBRATE:

break;

case RING:

break;

case TIMER:

break;

}

}

}

我的服务假设是持续运行,只有当我告诉它时,它应该停止.这就是我将其设置为前台服务的原因.这里的问题是我在尝试广播时遇到错误.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值