我是Android的编程新手,我遇到过这个问题:当我关闭其他活动时,我的BroadcastReceiver
无效。
例如,我的应用有两个活动('main'和'other')和一个BroadcastReceiver
链接到AlarmManager
。所以我用主要活动设置了警报,BroadcastReceiver
的待定意图执行了另一个活动(与主要不同)。问题是,当我回到主活动时,AlarmManager
线程已停止。
答案 0 :(得分:0)
Hí,这是我的代码(显示必不可少):
进入主要:
public void alm(View view) {
Intent intent = new Intent(this, Servicio.class);
//pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 234324243, intent, 0);
// Set the alarm to start at scheduled time before
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, uno);
calendar.set(Calendar.MINUTE, dos);
calendar.set(Calendar.SECOND, 00);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),86400000,
pendingIntent);
btn4.setBackgroundResource(R.drawable.stop1);
}
接收者:
public class Servicio extends BroadcastReceiver {
NotificationManager notificationManager;
Notification myNotification;
private static final int MY_NOTIFICATION_ID=1;
//private static Notificacion instance = null;
String packageName = "com.efemeridesEAR.alarmaschedule";
Calendar calendar = Calendar.getInstance();
int resId;
String resumen;
Class miclase;
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent){
try{
miclase = Class.forName("com.efemeridesEAR.alarmaschedule.Difusion");
}catch(ClassNotFoundException e){
}
Intent edu=new Intent(context, miclase);
//cojo el día y el mes
calendar.getTimeInMillis();
String dom1="";
int dom = calendar.get(calendar.DAY_OF_MONTH);
if(dom<10){
dom1="0"+dom;
}else{
dom1=""+dom;
}
int moy = calendar.get(calendar.MONTH);
moy=moy+1;
//defino el tiempo para el vibrador, si no está activo, vibra 0ms, o sea, no vibra!
SharedPreferences myPrefs;
myPrefs = context.getSharedPreferences("myPrefs", context.MODE_PRIVATE);
int vbr;
int vibracion=myPrefs.getInt("VIBRACION", 0);
if (vibracion == 0){
vbr=0;
}else{
vbr=2000;
}
//recojo el tema sobre el que ha de ir la notificación
//case 0:"Literatura"
//case 1:"Arte"
//case 2:"Historia"
//case 3:"Ciencia"
//case 4:"Deporte"
int eleccion=myPrefs.getInt("ELECCION", 0);
String elec="";
Intent notificationIntent = new Intent(context, Difusion.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
Notification elegida = new Notification.Builder(context).setContentTitle("FALLO").setStyle(new Notification.BigTextStyle().bigText("La carga ha fallado")).build();
switch (eleccion){
case 0:
elec="Literatura";
int resId = context.getResources().getIdentifier("_"+dom1+moy+"l", "string", packageName);
resumen = context.getString(resId);
elegida = new Notification.Builder(context)
/*
CharSequence contentTitle = "EDU Efemerides";
CharSequence bigText = "Notificación multilinea \n con varias líneas \n otra línea más";
*/
.setContentTitle("Efeméride diaria de literatura!")
.setTicker("Notificación!")
.setWhen(System.currentTimeMillis())
.setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true)
.setLights(Color.BLUE, 1000, 500)
.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.librop)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.libro))
.setStyle(new Notification.BigTextStyle()
.bigText("Un día como hoy de "+resumen))
.build();
break;
}
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(vbr);
mNotificationManager.notify(MY_NOTIFICATION_ID, elegida);
}
单击通知时的其他活动:
public class Difusion extends Activity{
private TextView titulo;
private TextView texto;
private Button salir;
private Button compartir;
private Button buscar;
String ttl;
String bdy;
String rm;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_difusion);
salir = (Button) findViewById(R.id.button3);
titulo = (TextView) findViewById(R.id.textView1);
compartir = (Button) findViewById(R.id.button1);
buscar = (Button) findViewById(R.id.button2);
texto = (TextView) findViewById(R.id.textView2);
String packageName = "com.efemeridesEAR.alarmaschedule";
String term;
Calendar calendar = Calendar.getInstance();
String elec;
int resId;
String resumen;
calendar.getTimeInMillis();
String dom1="";
int dom = calendar.get(calendar.DAY_OF_MONTH);
if(dom<10){
dom1="0"+dom;
}else{
dom1=""+dom;
}
int moy = calendar.get(calendar.MONTH);
moy=moy+1;
SharedPreferences myPrefs;
myPrefs = this.getSharedPreferences("myPrefs", this.MODE_PRIVATE);
int eleccion=myPrefs.getInt("ELECCION", 0);
switch (eleccion){
case 0:
elec="Literatura";
resId = this.getResources().getIdentifier("_"+dom1+moy+"l", "string", packageName);
resumen = this.getString(resId);
titulo.setText("Efeméride diaria de literatura!");
ttl="Efeméride diaria de literatura!";
bdy="Un día como hoy de "+resumen;
texto.setText("Un día como hoy de "+resumen);
rm=resumen;
break;
}
public void whtass(View y){
//bajo los datos de preferencias para cargar la info correcta
SharedPreferences myPrefs;
myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
int eleccion=myPrefs.getInt("ELECCION", 0);
//cojo la fecha, para buscar en el xmml correcto por fecha (primer digito por tema, segundo por mes y tercero por día)
Calendar calendar = Calendar.getInstance();
calendar.getTimeInMillis();
int dia = calendar.get(Calendar.DAY_OF_MONTH);
int mes = calendar.get(Calendar.MONTH);
// Establezco el texto a mostrar
String coco = ttl+"\n\n"+bdy;
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, coco);
sendIntent.setType("text/plain");
startActivity(sendIntent);
}
public void ggo(View u){
// extraigo solo el nombre para lo cual primero separo el texto por las comas, y de la primera parte desecho las dos primeras palabras (fecha y nacio/murio)
String[] separar = rm.split(",");
String par = separar[0];
String[] busq=par.split(" ");
String cici="";
for(int i=2;i<busq.length;i++){
cici=cici+busq[i]+" ";
}
Intent intentggl = new Intent(Intent.ACTION_WEB_SEARCH);
intentggl.putExtra(SearchManager.QUERY, cici);
startActivity(intentggl);
}
public void Salir(View t){
this.finish();
}
public void inicio(View g){
Intent inicio = new Intent(this, Principal.class);
startActivity(inicio);
this.finish();
}
我不在乎是否有人使用此代码,它将是免费的应用程序,我认为代码在这类应用程序中应该是免费的,所以这是大多数应用程序代码。
谢谢你们所有人的帮助!!!!