Aula 29/05 (AlarmManager)
-
Upload
ricardo-longa -
Category
Technology
-
view
704 -
download
0
Transcript of Aula 29/05 (AlarmManager)
PROGRAMAÇÃO PARADISPOSITIVOS MÓVEIS
AlarmManager
Objetivos da aula AlarmManager
Qual a maneira mais correta para disparar uma intent as 15:00:30 de cada dia?
Android nos facilita com AlarmManager...
Podemos predizer o futuro...
Podemos disparar uma Intent na data e hora desejada.
Depois que ativamos o alarme, podemos até esquecê-lo.
O alarme só será cancelado por nós ou caso o device seja reiniciado.
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long agendamentoEmMilis = calendario.getTimeInMillis(); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long agendamentoEmMilis = calendario.getTimeInMillis();
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long agendamentoEmMilis = calendario.getTimeInMillis();
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, agendamentoEmMilis, pendingIntent); }
}
O AlarmManager irá disparar a Intent “ALARME_TESTE” após 10 segundos. Neste período nosso aplicativo pode ter sido finalizado. Justamente por isso,
precisaremos de um BroadcastReceiver...
public class ReceberAlarme extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Alarme recebido!", Toast.LENGTH_LONG).show(); }
}
public class ReceberAlarme extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Alarme recebido!", Toast.LENGTH_LONG).show(); }
}
public class ReceberAlarme extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Alarme recebido!", Toast.LENGTH_LONG).show(); }
}
Registramos o BroadcastReceiver aonde?
<?xml version="1.0" encoding="UTF-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.senai.alarmmanager“ android:versionCode="1“>
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
<activity android:name=".ExemploAlarme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".ReceberAlarme"> <intent-filter> <action android:name="ALARME_TESTE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application>
</manifest>
<?xml version="1.0" encoding="UTF-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.senai.alarmmanager“ android:versionCode="1“>
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
<activity android:name=".ExemploAlarme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".ReceberAlarme"> <intent-filter> <action android:name="ALARME_TESTE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application>
</manifest>
<?xml version="1.0" encoding="UTF-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.senai.alarmmanager“ android:versionCode="1“>
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
<activity android:name=".ExemploAlarme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".ReceberAlarme"> <intent-filter> <action android:name="ALARME_TESTE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application>
</manifest>
<?xml version="1.0" encoding="UTF-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="br.senai.alarmmanager“ android:versionCode="1“>
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
<activity android:name=".ExemploAlarme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".ReceberAlarme"> <intent-filter> <action android:name="ALARME_TESTE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application>
</manifest>
Como cancelar um alarme?
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long agendamentoEmMilis = calendario.getTimeInMillis();
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, agendamentoEmMilis, pendingIntent); }
protected void onDestroy() { super.onDestroy(); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long agendamentoEmMilis = calendario.getTimeInMillis();
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, agendamentoEmMilis, pendingIntent); }
protected void onDestroy() { super.onDestroy();
Intent it = new Intent("ALARME_TESTE"); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long agendamentoEmMilis = calendario.getTimeInMillis();
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, agendamentoEmMilis, pendingIntent); }
protected void onDestroy() { super.onDestroy();
Intent it = new Intent("ALARME_TESTE"); PendingIntent pi = PendingIntent.getBroadcast(this, 0, it, 0); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long agendamentoEmMilis = calendario.getTimeInMillis();
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, agendamentoEmMilis, pendingIntent); }
protected void onDestroy() { super.onDestroy();
Intent it = new Intent("ALARME_TESTE"); PendingIntent pi = PendingIntent.getBroadcast(this, 0, it, 0); AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); }
}
public class ExemploAlarme extends Activity {
public void onCreate(Bundle savedInstanceState) { ... agendarPara10Segundos(); }
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long agendamentoEmMilis = calendario.getTimeInMillis();
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, agendamentoEmMilis, pendingIntent); }
protected void onDestroy() { super.onDestroy();
Intent it = new Intent("ALARME_TESTE"); PendingIntent pi = PendingIntent.getBroadcast(this, 0, it, 0); AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); manager.cancel(pi); }
}
E para repetir o alarme a cada 30 segundos?
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pi = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long emMilis = calendario.getTimeInMillis();
int trintaSegundos = 30 * 1000;
AlarmManager alarmmanager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmmanager.set(AlarmManager.RTC_WAKEUP, emMilis, pi);}
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pi = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long emMilis = calendario.getTimeInMillis();
int trintaSegundos = 30 * 1000;
AlarmManager alarmmanager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmmanager.setRepeating(AlarmManager.RTC_WAKEUP, emMilis, pi);}
private void agendarPara10Segundos() { Intent intencao = new Intent("ALARME_TESTE"); PendingIntent pi = PendingIntent.getBroadcast(this, 0, intencao, 0);
Calendar calendario = Calendar.getInstance(); calendario.setTimeInMillis(System.currentTimeMillis()); calendario.add(Calendar.SECOND, 10); long emMilis = calendario.getTimeInMillis();
int trintaSegundos = 30 * 1000;
AlarmManager alarmmanager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmmanager.setRepeating(AlarmManager.RTC_WAKEUP, emMilis, trintaSegundos, pi);}
Não utilize AlarmManager para simplesmente fazer uma Thread dormir por um determinado momento. Para isso, utilize Handler.
Até a próxima!