2016-04-16 15 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); 
} 

}

、あなたは何を我々がここで行っていることである

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); 

     } 
    }); 

ファイルAlarmActivity.classで編集する必要がされ、これを呼び出すために - 主な活動から) 1。このAlarmReciever.classファイルが呼び出され、スケジュールされた時間ごとに、電話機がロックされているかどうかに関係なくアラームが鳴ります。

質問がありましたら、こちらからご返信ください。 :)目盛りを押して答えを受け入れることを忘れないでください。

関連する問題