【发布时间】:2014-08-11 14:31:04
【问题描述】:
我有一个普通的 java 类(不是 Activity),它实现了我的应用程序的一个元素,包括一个带有 2 个动作的通知:第一个动作触发一个 PendingIntent 启动一个全新的活动,而另一个广播一个意图,它将陷入扩展 BroadcastReceiver 的 Receiver 类中,一切顺利(现在只播放 RAW 目录中的声音) 由于我需要更新在第一个 java 类中实现的对象的特定方面,我将接收器放在我的类中,以这种方式扩展 BroadcastReceiver,但根本不播放测试声音。 onReceive 方法中的代码在两个类中是相同的。
SingleInstance.java
package com.thepier.ingresstimer;
*various imports*
public class SingleInstance extends BroadcastReceiver {
/* Notification Misc */
private int ID;
private NotificationManager nm;
/* App context */
private Context cntx;
/* Contatore */
private int intCounter = 0;
/* Portal Data */
private int hackMax = 4; /* hackMax minimo */
private long coolTime = 300000; /* millisecondi = 5 minuti */
private long burnTime = 14400000; /* millisecondi = 4 ore */
/* Portal Cooldowns */
CountDownTimer cooldownTimer;
CountDownTimer burnoutTimer;
*other code*
public void showNotification () {
Intent intentPref = new Intent(cntx, PreferencesActivity.class);
PendingIntent pIntent1 = PendingIntent.getActivity(cntx, 0, intentPref, 0);
Intent intentHack = new Intent(cntx, SingleInstance.class);
//OR Intent intentHack = new Intent(cntx, HackReceiver.class);
intentHack.putExtra("ID", this.ID);
intentHack.putExtra("maxH", this.hackMax);
intentHack.putExtra("curH", this.intCounter);
PendingIntent pIntent2 = PendingIntent.getBroadcast(cntx, 0, intentHack, 0);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(cntx)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Cooldown terminato")
.setTicker("Cooldown terminato")
.addAction(R.drawable.ic_action_new, "Hack", pIntent2)
.addAction(R.drawable.ic_action_settings, "Impostazioni", pIntent1)
.setContentText("Hack: "+intCounter+"/"+hackMax);
nm.notify(ID, mBuilder.build());
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sfx_portal_hacking_alien);
mediaPlayer.start();
}
}
HackReceiver.java
package com.thepier.ingresstimer;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
public class HackReceiver extends BroadcastReceiver {
public HackReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
// TODO Auto-generated method stub
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sfx_portal_hacking_alien);
mediaPlayer.start();
}
}
【问题讨论】:
-
您是否像注册第二个一样注册了第一个?
-
现在可以工作了,忘记了 BroadcastReceiver 需要的空构造函数
标签: java android android-intent broadcastreceiver