2014-11-15

通知を表示しないで、常駐サービスを作りたい

Android アプリ開発をしていて、ちょっと悩んだので軽くまとめておきます。

常駐サービスを作るためには、startForeground() で Notification を動かせば OK。これは非常に一般的。
で、通知を消したいときには、インスタンス変数 (でいいんだっけ?) icon に 0 をセットすればいいのです。

Notification notification = new Notification();
notification.icon = 0;
startForeground(0, notification);

が、Android 4.3 以降 (4.4 では間違いなく) では、通知が表示されてしまうのです。
Android の仕様変更によるもののようです。

なので、なんとかならないか色々と調べてみたのですが、解決したといえば、解決したのですが、してないといえばしていません。


その方法は、「アプリ情報」の「通知の表示」のチェックボックスを外すというもの。



はっきり言って、ユーザーにこのチェックボックスを外させるのは結構至難の業かと思っています。ええ。

一応、その画面を呼ぶ方法は次の通り。因みに、自身のパッケージ名を取得する関数は getPackageName()。

/**
 * showAppInfo --- アプリ情報を開く
 * @params pkg パッケージ名 
 */
private void showAppInfo(String pkg) {
  Intent intent;
  if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.FROYO) {
    intent = new Intent(Intent.ACTION_VIEW);
    intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
    intent.putExtra("com.android.settings.ApplicationPkgName", pkg);
  } else if (android.os.Build.VERSION.SDK_INT == android.os.Build.VERSION_CODES.FROYO) {
    intent = new Intent(Intent.ACTION_VIEW);
    intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
    intent.putExtra("pkg", pkg);
  } else {
    intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS", Uri.parse("package:" + pkg));
  }
  startActivity(intent);
}

なんとも困ったものです。

0 件のコメント :

コメントを投稿