当我关闭其他活动时,为什么我的广播接收器不起作用?

时间:2015-02-06 11:11:57

标签: android alarmmanager

我是Android的编程新手,我遇到过这个问题:当我关闭其他活动时,我的BroadcastReceiver无效。

例如,我的应用有两个活动('main'和'other')和一个BroadcastReceiver链接到AlarmManager。所以我用主要活动设置了警报,BroadcastReceiver的待定意图执行了另一个活动(与主要不同)。问题是,当我回到主活动时,AlarmManager线程已停止。

1 个答案:

答案 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();
    }

我不在乎是否有人使用此代码,它将是免费的应用程序,我认为代码在这类应用程序中应该是免费的,所以这是大多数应用程序代码。

谢谢你们所有人的帮助!!!!