Skip to main content

How to set alarm to show a notification at future date with AlarmManager?

Lets assume you want to do a job a future time or show a notification at a selected time. AlarmManager can help to send an intent in future time. First we need to select date,

Lets create a date in 2050,

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2050);
Date date = calendar.getTime();

For showing notification we need a service.

public class AlarmReceiver extends Service {

    public AlarmReceiver() {
    }

    @Override    public IBinder onBind(Intent intent) {
    }
}

Add service to Manifest.xml

<service    android:name="com.kozaxinan.example.alarm.AlarmReceiver"    android:enabled="true"    android:exported="true" ></service>

We will modify AlarmReceiver for sending notification. But first we need to register a alarm.

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);intent.putExtra("Alarm", true);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
// Sets an alarm - note this alarm will be lost if the phone is turned off and on again
alarmManager.set(AlarmManager.RTC, date.getTime(), pendingIntent);

This will start AlarmReceiver service In 2050, at the moment. So our service need to show a notification.

public class AlarmReceiver extends Service {

    public AlarmReceiver() {
    }

    public static final int NOTIFICATION_ID = 5111;
    /**     * Class for clients to access     */    public class ServiceBinder extends Binder {

        AlarmReceiver getService() {
            return AlarmReceiver.this;        }
    }

    @Override    public void onCreate() {
        Log.i("AlarmReceiver", "onCreate()");    }

    @Override    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("LocalService", "Received start id " + startId + ": " + intent);
        // If this service was started by out AlarmTask intent then we want to show our notification        if (intent.getBooleanExtra("Alarm", false)) {
            showNotification();        }

        // We don't care if this service is stopped as we have already delivered our notification        return START_NOT_STICKY;    }

    @Override    public IBinder onBind(Intent intent) {
        return mBinder;    }

    // This is the object that receives interactions from clients    private final IBinder mBinder = new ServiceBinder();
    /**     * Creates a notification and shows it in the OS drag-down status bar     */    private void showNotification() {

        NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
        Intent intent = new Intent(this, FirstScreen.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
        mBuilder.setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle("Title")
                .setAutoCancel(true)
                .setContentText("Text");
        mBuilder.setContentIntent(contentIntent);
        mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
        // Stop the service when we are finished
        stopSelf();    }
}




Comments

Popular posts from this blog

Using Accelerometer when Screen Off

Introduction

Android Phones have a lot of built-in sensor such as gyro, proximity and accelerometer.
Using Accelerometer in Android is a known thing. For listening sensors, class or service needs a SensorEventListener implementation. An Activity is only exists when you are seeing it. When phone enters standby mode, activity which was recently active frozen and restored whenever needed. While this frozen time, activity doesn’t run. Because of that it doesn’t need sensor updates. And Android stop to listen some sensors for power management.

Services have this condition like classes (activity). In contrast to class, a service run every time, even when phone is in standby mode. Therefore Services needs sensor updates for some situations. But android stop to listen some sensor(accelerometer) in some different phones.

There is a solution for that. This is not an exact solution but it work with a lot of phones.

With a BroadcastReceiver listenIntent.ACTION_SCREEN_OFFand register sensor listener a…

Android Telefonlarda Usb Problemi

Telefonum kendi kendine araba moduna girmeye ve şarj sırasında problem yaratmaya başladı. Genel olarak sorun usb portu ile alakalı olduğu kesindi. Telefonu bilgisayara taktığım zaman tanıyamıyor, bazen şarj oluyor bazen olmuyor, bazen takılı değilken bile şarj olduğunu zannediyordu. Sorunu yazılımsal olabilir diye her türlü şeyi denedim ama çözüm olmadı.

Sorunun çözümü olarak internette okuduğum ingilizce kaynaklarda USB portun 4 ve 5 inci pinlerinde gizli olduğunu öğrendim. Telefon 4 ve 5. pinler üzerinde direnç oluşunca (yağ, su, kir vb.) telefon araçta kullanıldığını zannediyor. Donanımsal bu uyarı yazılımsal desteklenmediği için telefon saçmalıyor.

Çözüm ise aslında çok basit ama uygularken dikkatli olmak lazım. Öncelikle kendiniz uğraşmanızı tavsiye etmiyorum. Bir profesyonele danışın yada teknik servise götürün.

CİHAZINIZDA OLUŞABİLECEK PROBLEMLERDE TÜM SORUMLULUK SİZE AİTTİR. BU YAZIDA ANLATTIKLARIM KENDİ TECRÜBELERİM VE YABANCI FORUMLARDAN OKUDUKLARIMDAN İBARETTİR.

1- Ama herşe…

Eclipse'te Android Sanal Makinesi oluşturma

Eclipse'te oluşturduğumuz projeleri denemek için Eclipse'te Android Sanal makinesı oluşturabiliriz. Bu yaptığımız programları önce bilgisayar üzerinde denememiz ve ilk izlenimlerimizi oluşturmamız için önemlidir. Her android sürümü için farklı sanal makine oluşturabileceğimiz için yazdığımız programın farklı sürümlerde nasıl çalıştığını görmemize yardımcı olur.

Bu sanal makineyi önceki yazılarda anlattığımız şekilde kurduğumuz Eclipse'te  bir kaç adımda oluşturabiliriz. Bunun içim aşağıdaki adımları izlememiz yeterli olucaktır.

Windows-> AVD Manager a tıklayalım. Açılan pencerede sağ üstten "New"e basarak yeni sanal makine oluşturacağımız ekrana gelelim.

Burda "Name" kısmına istediğimiz ismi yazabiliriz. Ama tavsiyem oluşturacağınız android sürümü ile alakalı isimler verin. örn: Android 2.1 sürümü için Andro_2.1 şeklinde isim verebilirsiniz.


"Target" kısmında oluşturacağınız sanal makinenin API sini seçmelisiniz.

SD kart kısmına sanal maki…