Я пишу приложение с фиксированной функцией автоматического выхода из системы.Вот код:
AndroidManifest:
<application
[...]>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
[...]
<receiver
android:name="myPackage.LoginAlarm">
<intent-filter>
<action android:name="myPackage.ACTION_LOGOUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
Активность (из onActivityResult, после успешного входа в систему):
if(session.getUser().length() > 0) {
Intent i = new Intent(getResources().getString(R.string.action_logout));
i.setClass(this, LoginAlarm.class);
this.sendBroadcast(i);
al.setOwner(this); // LoginAlarm instance, setting context.
al.setAlarm(this, i);
}
LoginAlarm class:
public class LoginAlarm extends BroadcastReceiver {
private final static long LIMIT = 600000; // session timeout, 10 minutes.
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
private StartAct owner;
public LoginAlarm() {}
@Override
public void onReceive(Context context, Intent intent) {
Log.i("LoginAlarm", "onReceive: time out.");
}
public void setAlarm(Context context, Intent intent) {
if(alarmMgr != null) alarmMgr.cancel(alarmIntent);
alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmIntent = PendingIntent.getBroadcast(context, 1, intent, 0);
long trigger = System.currentTimeMillis() + LIMIT;
alarmMgr.set(AlarmManager.ELAPSED_REALTIME, trigger, alarmIntent);
String click = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis()));
String end = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(trigger));
Log.i("LoginAlarm", "setAlarm: Click at: " + click + ". Alarm set: " + end);
}
}
Если в моей Деятельности я прокомментирую строку:
this.sendBroadcast(i);
onReceive никогда не вызывается, но с этой строкой метод вызывается сразу после установки тревоги, независимо от того,как долго ЛИМИТ.
Пожалуйста, я читаю тонны статей, учебных пособий и постов, но пока безуспешно.
Нужна подсказка.
Заранее спасибо.