警报不起作用的程度变得不真实。我有两个问题,Android杀了我的应用程序,因此一切都停止,即使我读到的一切都说它应该工作。
我的AlarmManager项目在我绿化我的应用程序时死亡,Greenify给我就像让手机坐在那里并让Android杀死它一样。无论哪种方式,我都应该在提示中等待发出我的PwendingIntent。否则,RTC_WAKEUP对于警报设置有什么用处。
我的清单
<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我的应用程序,我在logcat查看器中看不到Log.d打印出来。从我能阅读和理解的内容中,AlarmManager应该触发我的BroadcastReceiver并开始工作。
如果我让这个工作,我会写一个详细的解释,所以其他人不会经历同样的事情。如果这个shoudl工作,是否有一些设置可能会杀死与我的应用程序的关联,我需要取消选中?
更新
这段代码很扎实。我遇到了一个二级应用程序Greenify的问题,除了我的直接交互之外,它已经以某种方式打开了。该应用程序在屏幕关闭时杀死了我的应用程序。告诉Greenify不要触摸我的应用程序后,此代码将根据需要执行。从好的方面来说,我学到了很多关于BroadcastReceiver,AlarmManager和Service实现的知识,因为我尝试了10种不同的方法来解决我用代码无法解决的问题。
答案 0 :(得分:0)
Greenify正在杀死我的申请。请参阅OP中的更新