2016-04-16 2 views
0

У меня есть расписание будильника, чтобы запустить ретранслятор широковещательной передачи, когда он поднят во времени, и внутри проверки широковещательной передачи для некоторого параметра аварийного объекта, чтобы определить, какую деятельность нужно запустить. Приложение работает когда экран включен, но когда экран заблокирован он не работаетАктивность Не отображается, когда поднят будильник

Вот что я сделал:

-это для графика сигнализации

/* Prepare Alarm Intent*/ 
      Intent alarmIntent = new Intent(ctx, LockRoute.class); 
      alarmIntent.putExtra(CONSTANTS.ALARM_NAME, alarm.alarmName); 
      alarmIntent.putExtra(CONSTANTS.ALARM_TONE, alarm.tone); 
      alarmIntent.putExtra(CONSTANTS.ALARM_LOCK_TYPE, alarm.unLockType); 


      //prepare the Pending intent 

      PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, day.getId().intValue(), alarmIntent, 0); 

и это широковещательный

/* Pass Alarm Info to unLock Screen*/ 
     alarmRaised.putExtra(CONSTANTS.ALARM_NAME,bundle.getString(CONSTANTS.ALARM_NAME)); 
     alarmRaised.putExtra(CONSTANTS.ALARM_TONE,bundle.getString(CONSTANTS.ALARM_TONE)); 
     alarmRaised.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(alarmRaised); 

И я добавил флаги для деятельности, чтобы показать, когда устройство заблокировано

pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     Logger.init(); 
     /* Check Device SDK to call the correct Function to TURN ON SCREEN */ 
     if (Build.VERSION.SDK_INT < 20) { 
      if (!pm.isScreenOn()) { 
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
         + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
         +WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
         +WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
       Logger.d("less than 20"); 
      }else { 
       Logger.d("SCREEN ON < 20"); 
      } 

     } else { 
      if (!pm.isInteractive()) { 
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
         + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
         +WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
         +WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
       Logger.d("bigger = than 20"); 
      }else { 
       Logger.d("SCREEN ON else 20"); 
      } 
     } 

ответ

0

Я сделал приложение, которое расписанием алармов, который звонит независимо от того, является ли экран заблокирован или нет. Это может помочь вам с вами файл AlarmReciever.class.

public class AlarmReceiver extends WakefulBroadcastReceiver { 

@Override 
public void onReceive(final Context context, Intent intent) { 


    //this will sound the alarm tone 
    //this will sound the alarm once, if you wish to 
    //raise alarm in loop continuously then use MediaPlayer and setLooping(true) 
    Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    if (alarmUri == null) { 
     alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    } 
    Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); 
    ringtone.play(); 

    //this will send a notification message 
    ComponentName comp = new ComponentName(context.getPackageName(), 
      AlarmService.class.getName()); 
    startWakefulService(context, (intent.setComponent(comp))); 
    setResultCode(Activity.RESULT_OK); 
} 

}

и назвать это вы будете нуждаться для редактирования в AlarmActivity.class файл

final Intent my_intent = new Intent(AlarmActivity.this, AlarmReceiver.class); 
    Button Alarm_ON = (Button) findViewById(R.id.bu1); 
    Alarm_ON.setOnClickListener(new View.OnClickListener() { 

     @TargetApi(Build.VERSION_CODES.M) 
     @Override 
     public void onClick(View v) { 

      int hour = 0; 
      int minute = 0; 
      int currentApiVersion = android.os.Build.VERSION.SDK_INT; 
      if (currentApiVersion > android.os.Build.VERSION_CODES.LOLLIPOP_MR1) { 

       calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour()); 
       calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute()); 

       hour = alarmTimePicker.getHour(); 
       minute = alarmTimePicker.getMinute(); 
      } else { 
       calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour()); 
       calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute()); 

       hour = alarmTimePicker.getCurrentHour(); 
       minute = alarmTimePicker.getCurrentMinute(); 
      } 


      String hour_string = String.valueOf(hour); 
      String minute_string = String.valueOf(minute); 


      if (hour > 12) { 
       hour_string = String.valueOf(hour - 12); 
      } 

      if (minute < 10) { 

       minute_string = "0" + String.valueOf(minute); 
      } 
      //setAlarmText("Alarm set to: " + hour_string + ":" + minute_string); 
      Toast.makeText(getApplicationContext(), "Alarm set to: " + hour_string + ":" + minute_string, Toast.LENGTH_LONG).show(); 
      my_intent.putExtra("extra", "alarm on"); 

      pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this, 0, 
        my_intent, PendingIntent.FLAG_UPDATE_CURRENT); 

      alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
        pendingIntent); 

     } 
    }); 

То, что мы сделали здесь - 1) от основной деятельности. файл этого файла AlarmReciever.class будет вызываться, и в соответствии с запланированным временем будиль звонит, не имеет значения, заблокирован ли телефон или нет.

Получил какие-либо вопросы, тогда ответьте здесь. :) и не забудьте принять ответ bu, нажимая знак Tick.

Смежные вопросы