Android Notification(通知) サンプル
開始したサービスから、通知を行い、通知をクリックしたら Activity を表示する。
https://github.com/pppiroto/KaigiUtil/tree/73bfa6c6a624207552066129b157353b159f2ca5
1.通知アイコン
通知アイコンを準備。
AndroidStudio から、res/drawable のコンテキストメニューから、New-Image Asset を選択、Icon Type に、Notification icons を指定
2.Notificationの作成
https://developer.android.com/guide/topics/ui/notifiers/notifications.html?hl=ja
package info.typea.kaigiutil;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.Vibrator;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.widget.Toast;
public class SleepDefenderService extends Service {
private Vibrator vibrator;
public SleepDefenderService() {
}
@Override
public IBinder onBind(Intent intent) {
throw null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
vibrator = (Vibrator)this.getSystemService(Context.VIBRATOR_SERVICE);
if (!vibrator.hasVibrator()) {
Toast.makeText(this, "no vibrator.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "start vibe as service", Toast.LENGTH_SHORT).show();
long pattern[] = {1000, 100};
int repeatIndex = 0; // 繰り返し開始位置 -1の場合繰り返しなし
vibrator.vibrate(pattern, repeatIndex);
}
doNnotify();
return START_STICKY;
}
/**
* notifications
*/
private void doNnotify(){
// 通知を作成
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("Kaigi Util")
.setContentText("Stop sleep defender for click here.")
.setTicker("Sleep defender started.");
// Activity を起動
Intent resultIntent = new Intent(this, ContentActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ContentActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent pendingIntent =
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
builder.setContentIntent(pendingIntent);
int notificationId = 1;
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.notify(notificationId, builder.build());
}
@Override
public void onDestroy() {
super.onDestroy();
vibrator.cancel();
Toast.makeText(this, "stop vibe as service", Toast.LENGTH_SHORT).show();
}
}
