Это становится нереальным, насколько сигнал тревоги не будет работать. У меня есть 2 проблемы с Android, убивающим мое приложение, и поэтому все останавливается, хотя все, что я читаю, говорит, что оно должно работать.Тревога убивается с помощью приложения
Пункт My AlarmManager умирает, когда я очищаю свое приложение, а Greenify мне то же самое, что позволяет телефону сидеть там и у Android его убивать. В любом случае, у меня должна быть тревога в ожидании, чтобы запустить мой PwendingIntent. В противном случае, что такое RTC_WAKEUP для настройки тревоги.
Мой Manifest
<receiver
android:name=".ContactAlarmReceiver"
android:enabled="false"
android:process=":alarmremote">
<intent-filter>
<action android:name="com.example.johnbravado.zionwork.CONTACTALARM" />
<action android:name="com.example.johnbravado.zionwork.NOTIFLTBTN" />
<action android:name="com.example.johnbravado.zionwork.NOTIFRTBTN" />
</intent-filter>
</receiver>
Мой приемник
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
//throw new UnsupportedOperationException("Not yet implemented");
//Toast.makeText(context, "Received Alarm", Toast.LENGTH_SHORT).show();
Log.d("johnbravadoCAR ","received");
PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"com.example.johnbravado.zionwork");
wakeLock.acquire();
ComponentName component = new ComponentName(context, ContactAlarmIntentService.class);
context.getPackageManager()
.setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Intent alarmIntent = new Intent(context, ContactAlarmIntentService.class);
alarmIntent.putExtras(intent.getExtras());
alarmIntent.setAction(intent.getAction());
context.startService(alarmIntent);
wakeLock.release();
}
Я знаю, что android:enabled="false"
в манифесте. Я делаю это с помощью вызова PackageManager перед тем, как установить будильник. Ниже
private void setAlarm() {
//ContactAlarmReceiver contactAlarmReceiver = new ContactAlarmReceiver();
//contactAlarmReceiver.setAlarm(getApplicationContext(), dateInMillis, phonenumberET.getText().toString(), firstnameET.getText().toString());
ComponentName component = new ComponentName(this, ContactAlarmReceiver.class);
getPackageManager()
.setComponentEnabledSetting(component,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(MyConstants.BROADCAST_ACTION_CONTACT_ALARM);
alarmIntent.putExtra("phone", phonenumberET.getText().toString());
alarmIntent.putExtra("name", firstnameET.getText().toString());
PendingIntent pi = PendingIntent.getBroadcast(this, 123456, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT >= 23) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, dateInMillis, pi);
} else if (Build.VERSION.SDK_INT >= 19) {
am.setExact(AlarmManager.RTC_WAKEUP, dateInMillis, pi);
} else {
am.set(AlarmManager.RTC_WAKEUP, dateInMillis, pi);
}
}
После того, как я поставил будильник на некоторое время дольше, чем 30 минут, или если я установить сигнализацию в течение 3 минут и Greenify моего приложения, я не вижу Log.d печати в моем LogCat зритель. AlarmManager, из всего, что я могу читать и понимать, должен срабатывать для моего BroadcastReceiver и работать.
Если я когда-либо получаю это на работу, я собираюсь написать подробное объяснение, чтобы кто-то еще не прошел через эту же вещь. Если этот shoudl работает, есть ли какие-то настройки, которые могут убивать ассоциации с моим приложением, мне нужно снять флажок?
Обновление:
Этот код твердый. У меня возникла проблема со вторичным приложением Greenify, которое каким-то образом было отключено от моего прямого взаимодействия. Это приложение убивало мое приложение, когда экран погас. После того, как Greenify не прикасался к моему приложению, этот код выполнялся по мере необходимости. С яркой стороны я много узнал о реализации BroadcastReceiver, AlarmManager и Service, так как я пробовал как 10 различных способов борьбы с проблемой, которую я не мог решить с помощью кода.
Если ваше приложение убито, когда будильник погаснет, Android увидит, что ресивер не включен. Разрешение не продлится до жизненного цикла приложения. Так что это не может пройти. Попробуйте включить его и убедитесь, что это единственная проблема. –
Я попытался включить приемник, и он все еще не получен –
И что делает Greenify делать * точно *? Если приложение ставит приложение в состояние остановки, то никакие приемники или службы не могут запускаться. –