2012年8月19日日曜日

Android Notificationで通知をする 2

以前に書いていたAndroid Notificationで通知をするで使っている下記2つの関数。
Notification(int icon, CharSequence tickerText, long when)
void setLatestEventInfo(Context context, CharSequence contentTitle, CharSequence contentText, PendingIntent contentIntent)
deprecatedになっていて、Notification.Builderを使えとのこと。

Notification.Builderを使って書き換える。
notification = new Notification.Builder(MainActivity.this)
    .setContentIntent(contentIntent).setSmallIcon(R.drawable.icon)
    .setTicker("tickerText").setContentTitle("contentTitle")
    .setContentText("contentText").setWhen(System.currentTimeMillis())
    .getNotification();
Notification.BuilderはAPIレベル11からなので、これだと11未満でエラーになる。11未満も対象ならClassがない場合は、前回の方法。
                Intent intent = new Intent(MainActivity.this,MainActivity.class);
                PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);

                Notification notification;
                try {
                    Class.forName("android.app.Notification$Builder");
                    notification = new Notification.Builder(MainActivity.this)
                            .setContentIntent(contentIntent).setSmallIcon(R.drawable.ic_launcher)
                            .setTicker("tickerText").setContentTitle("contentTitle")
                            .setContentText("contentText").setWhen(System.currentTimeMillis())
                            .getNotification();
                } catch (ClassNotFoundException e) {
                    notification = new Notification(R.drawable.ic_launcher,"tickerText", System.currentTimeMillis());
                    notification.setLatestEventInfo(MainActivity.this,"contentTitle", "contentText", contentIntent);
                }
                NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                nm.notify(12345, notification);
こうしておけば、バージョン上がって関数廃止されたとしても問題ないはず。