Ну, в моем приложении я пробую следующую функциональность. Я хочу, чтобы в зависимости от даты и времени пользователь получал уведомления.
Например:
- 9 сентября, 19.13 получить уведомление с сообщением1
- 10 сентября, 07.30, сообщением 2,
- тот же день, но 11.50, с сообщением 3 и так далее...
Я использовал будильник и панель уведомлений, но это сработало только для первого. Поэтому я искал это, и было сказано, что я должен использовать диспетчер повторяющихся сигналов тревоги.
Прежде чем опубликовать свой код, я хочу прояснить некоторые вещи: 1) я думаю, что он должен работать так: я должен каждые 1-2 минуты проверять, который сейчас час, извлекать мое следующее «время» из массива, который события хранятся, и установить для этого будильник, верно? Затем, учитывая, что этот кусок кода будет запускаться каждые 1-2 минуты, я снова проверю, выберу следующее событие, установим будильник на это время и так далее.
Я прав?
Итак, начнем с того, что я пытаюсь реализовать диспетчер повторяющихся сигналов тревоги, который каждую 1 минуту будет отображать мне всплывающее сообщение (если я сделаю это и заменю всплывающее сообщение на get_next_event() и set_next_notification(), я думаю, что работа будет выполнена. - Эти функции отлично работают в моем проекте с установленным только одним будильником).
Но проблема в том, что когда я запускаю свой сервис, я ничего не вижу.
вот мой код:
Alarm.java
public class Alarm extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "Starting Alarm Manager", Toast.LENGTH_LONG).show(); // For example
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
// Put here YOUR code.
Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example
wl.release();
}
public void SetAlarm(Context context)
{
Toast.makeText(context, "Setting Alarm Manager", Toast.LENGTH_LONG).show(); // For example
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 , pi); // Millisec * Second * Minute
}
public void CancelAlarm(Context context)
{
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
YourService.java
public class YourService extends Service
{
Alarm alarm = new Alarm();
public void onCreate()
{
super.onCreate();
Toast.makeText(YourService.this, "Service Created", Toast.LENGTH_LONG).show(); // For example
}
public void onStart(Context context,Intent intent, int startId)
{
Toast.makeText(YourService.this, "Setting from Service", Toast.LENGTH_LONG).show(); // For example
alarm.SetAlarm(context);
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
}
Демоактивность.java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonStart = (Button) findViewById(R.id.buttonStart);
buttonStop = (Button) findViewById(R.id.buttonStop);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
}
public void onClick(View src) {
switch (src.getId()) {
case R.id.buttonStart:
Toast.makeText(ServicesDemo.this, "Button Pressed", Toast.LENGTH_LONG).show(); // For example
Log.d(TAG, "onClick: starting srvice");
startService(new Intent(this, YourService.class));
break;
case R.id.buttonStop:
Log.d(TAG, "onClick: stopping srvice");
stopService(new Intent(this, YourService.class));
break;
}
}
Итак, я нажимаю кнопку, я вижу, что «кнопка нажата», я вижу, что «служба создана», но тогда ни один из тостов, которые запустил будильник, не отображаются. И, конечно же, я ничего не вижу каждую 1 минуту.
вот мой манифест.
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
<activity android:name=".ServicesDemo" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:enabled="true" android:name=".YourService" />
<receiver android:process=":remote" android:name="Alarm"></receiver>
</application>
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
</manifest>
Итак, что мне нужно изменить в моем коде или в манифесте?