Ver mensagens sem resposta | Ver tópicos ativos Hoje é 19 Nov 2019, 20:19



Responder Tópico  [ 1 Mensagem ] 
 Agendar Alarme com AlarmManager 
Autor Mensagem
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2735
Localização: Rio de Janeiro
Mensagem Agendar Alarme com AlarmManager
Para agendar um alarme, usamos o método setRepeating() da classe AlarmManager. Ele recebe 4 parâmetros, sendo eles o tipo, a hora, o intervalo e um PendingIntent.
Nesse exemplo serão definidos alarmes no clique de um botão e na inicialização do sistema (os alarmes são perdidos quando o dispositivo é desligado), com a action BOOT_COMPLETED. Devemos adicionar também a permissão RECEIVE_BOOT_COMPLETED, necessária pra essa action.
O manifest fica assim:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.rj.lanzieri.alarm"
    android:versionCode="1"
    android:versionName="1.0">

   
    <uses-permission
        android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

   
    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="19" />

   
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">

        <activity
            android:name=".HomeActivity"
            android:label="@string/app_name">

            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
               
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
       
        <receiver android:name=".AlarmReceiver">
            <intent-filter>
                <action android:name="br.rj.lanzieri.action.ACTION_ALARM_RECEIVER"/>
            </intent-filter>
        </receiver>
       
        <receiver android:name=".BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
       
    </application>
   
</manifest>
 


O layout.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

   
    <Button
        android:id="@+id/start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Iniciar Alarme">

    </Button>
   
    <Button
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cancelar Alarme">

    </Button>
   
</LinearLayout>
 


Na activity são definidos os valores do setRepeating().


package br.rj.lanzieri.alarm;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * @author Jefferson Lanzieri
 *
 */

public class HomeActivity extends Activity implements OnClickListener {
   
    private AlarmManager manager;
   
    private Intent i;
    private PendingIntent pi;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_activity);
       
        manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
       
        i = new Intent("br.rj.lanzieri.action.ACTION_ALARM_RECEIVER");
        pi = PendingIntent.getBroadcast(this, 0, i, 0);
       
        Button start = (Button) findViewById(R.id.start);
        Button cancel = (Button) findViewById(R.id.cancel);
       
        start.setOnClickListener(this);
        cancel.setOnClickListener(this);
    }
   
    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.cancel) {
            manager.cancel(pi); //cancela o alarme
        } else {
            long time = System.currentTimeMillis() + 2000; //começa em 2 segundos
            long interval = 5000; //roda a cada 5 segundos
           
            manager.setRepeating(AlarmManager.RTC_WAKEUP, time, interval, pi);
        }
    }
   
}
 


O AlarmReceiver, chamado pela PendingIntent mostra apenas um Toast.


package br.rj.lanzieri.alarm;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * @author Jefferson Lanzieri
 *
 */

public class AlarmReceiver extends BroadcastReceiver {
   
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = "br.rj.lanzieri.action.ACTION_ALARM_RECEIVER";
       
        if (intent.getAction().equals(action)) {
            Toast.makeText(context, "Alarme disparado, mostre uma notificação ou faça uma consulta num servidor.", Toast.LENGTH_SHORT).show();
        }
    }
   
}
 


Por último a classe BootReceiver, onde defini o tempo pra 06:50 com um Calendar apenas pra diferenciar da activity.


package br.rj.lanzieri.alarm;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import java.util.Calendar;

/**
 * @author Jefferson Lanzieri
 *
 */

public class BootReceiver extends BroadcastReceiver {
   
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
       
        if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
            Calendar calendar = Calendar.getInstance();
           
            calendar.set(Calendar.HOUR_OF_DAY, 6); //6 horas
            calendar.set(Calendar.MINUTE, 50); //50 minutos
           
            long time = calendar.getTimeInMillis();
            long interval = 24 * 60 * 60 * 1000; //1 dia
           
            Intent i = new Intent("br.rj.lanzieri.action.ACTION_ALARM_RECEIVER");
            PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
           
            AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            am.setRepeating(AlarmManager.RTC_WAKEUP, time, interval, pi);
        }
       
    }
}
 

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


26 Mai 2015, 02:27
Perfil WWW
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 1 Mensagem ] 

Quem está online

Usuários vendo este fórum: Abraao, ademir.carvalhojr, adilson.afl, albinoneto, alexandreufcg, Alexsandro Tirloni, alylson, Andre Brito, Andreid, andreleitao, andreluzz, Arthas, austonrd, bigr ecreio, billsombrio, Bitetti, brenda, brpiassa, BTalhadas, buccalon, C-3PO, C0GuM3I0, capo, Carmizini, cavenaghi, cenatech, cezaraf, Clone Trooper, Crazy_Droid, dalmeidabr, deborazb, Deiapinh, deivisonrpg, diogeneskelsen, dnakamashi, Douglas Siviotti, dramos, e-azuos, ederson_4, eduardo.ali, EduardoYC, eduzortea, eloilton, Emanuella, erissi, estratecnologia, everaldo, fabrizior, Flavio Alves, flaviolemos, fraga, fredjpa, gfgodoy, Gui Pereira, Guilherme Cobain, guilhermesmo, GuilhermeZampieri, heliopassos, hellbest, hopper.frf, HyagoRules, inesfg, interservic, jacksaum, jeanbr07, JeffCF, jijo, jlucasps, joaquimfoto, Joessi2007, Josinhaz, jrsilva, juliano, Julio Assis, juniorsk8, jzaires, Ki-Adi-Mundi, klebersilvarocha, kristopher, Kureiton, lalaine, leoadias, Leonardo333, lucasmadeira, m4v0, Marcelo Alves, mateusff, MBetioli, Moisés Souto, monteirojp, mtomazzi, mvoto, nandopierre, nilsgome, nino, Orivalde, otpor, Padawan, Patricia, paulokiller, paulosantos, pfsmorigo, pgsnit, piagg, Rafael, ramonsa, renanpl, renatodondoni, rerp7, Rickxdx, rodrigo aguiar, Rufino, silvio.carlos, snonca, srsilveira, Stryder, ThiMatsu, tiagoxv, Toks, ton.soares, valaszek, Vania, vanmars, vieira, washington, weber, wesley.messias, wilson.slima, wingdoido e 6 visitantes


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi