Android  使用権の使用を通知します。

5296 ワード

Android  使用権の使用を通知します。
概要
現在、多くのサードパーティセキュリティAPPはメッセージ管理機能またはメッセージボックス機能を持っています。フィルタリングシステムの中の無駄なメッセージを管理して、メッセージバーをよりさわやかで清潔にします。この機能の実現はAndroidで提供された通知の使用権を使用しています。Android 4.3は、通知使用権NotificationListenerServiceに加入しています。つまり、あなたが開発したAPPがこの権限を持っていると、現在のシステムの通知の変化を傍受できます。Android d4.4の後、通知の詳細情報を得ることができるように拡張されました。NotificationListenerServiceの具体的な使い方を見てみます。
使用
新しいサービスクラスを作り、NotificationListenerServiceを継承し、二つの重要な方法を実現します。

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) 
public class NotificationListener extends NotificationListenerService { 
  privatestatic final String TAG = "NotificationListener"; 
  
  @Override 
  public void onNotificationRemoved(StatusBarNotification sbn) { 
    Log.i(TAG,"Notification removed"); 
  } 
  
  @Override 
  public void onNotificationPosted(StatusBarNotification sbn) { 
    Log.i(TAG, "Notification posted"); 
  } 
} 
Android Manifest.xmlは、このサービスの種類を宣言し、BIND_を宣言しなければならない。NOTIFICATION_リマスターSERVICEライセンスと意図フィルタ
android.service.notifications.NotificationListenerService、そしてシステム設定で使用権リストで見たlabelタグを通知します。

<serviceandroid:name=".NotificationListener" 
     android:label="         " 
     android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 
  <intent-filter> 
    <actionandroid:name="android.service.notification.NotificationListenerService"/> 
  </intent-filter> 
 </service> 
OKです。このように簡単にAPPモニターシステム通知バーの機能を完成できます。次に、NotificationListenerService類を見に来ました。また、いくつかの重要な方法があります。

StatusBarNotification[] sbns = getActiveNotifications();         //               
cancelAllNotifications();                        //                
cancelNotification(String pkg, String tag, int id);           //           
また、上記の2つの重要な書き換え方法があります。

onNotificationRemoved(StatusBarNotification sbn);            //          
onNotificationPosted(StatusBarNotification sbn);             //           
これらの2つの重要なチューニング方法は、それらのパラメータStutsBarNotificationオブジェクトは、現在の変更通知をトリガする詳細情報である。Status BarNotificationの使用を見に来ました。

sbn.getId();                               //        id 
sbn.getNotification();                          //        
sbn.getPackageName();                          //           
sbn.getPostTime();                            //           
sbn.getTag();                              //      Tag,        null 
sbn.isClearable();                            //            ,   FLAG_ONGOING_EVENT、FLAG_NO_CLEAR 
sbn.isOngoing();                             //              ,   FLAG_ONGOING_EVENT 
ここで、get Notification()が戻ってきた通知オブジェクトは、通知された他の関連情報を詳細に見ることができる。

Notification notification = sbn.getNotification(); 
notification.contentView;                        //    RemoteViews 
notification.contentIntent;                       //    PendingIntent 
notification.actions;                          //         
// Android4.4                
if (Build.VERSION.SDK_INT >Build.VERSION_CODES.JELLY_BEAN_MR2) { 
     Bundle extras = notification.extras; 
     String notificationTitle = extras.getString(Notification.EXTRA_TITLE); 
     int notificationIcon = extras.getInt(Notification.EXTRA_SMALL_ICON); 
     Bitmap notificationLargeIcon = ((Bitmap)extras.getParcelable(Notification.EXTRA_LARGE_ICON)); 
     CharSequence notificationText = extras.getCharSequence(Notification.EXTRA_TEXT); 
     CharSequence notificationSubText = extras.getCharSequence(Notification.EXTRA_SUB_TEXT); 
} 
システム設定にジャンプした通知の使用権ページ

private boolean gotoNotificationAccessSetting(Contextcontext) { 
  try { 
    Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intent); 
    return true; 
  } catch(ActivityNotFoundException e) { 
    try { 
      Intent intent = new Intent(); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      ComponentName cn = new ComponentName("com.android.settings","com.android.settings.Settings$NotificationAccessSettingsActivity"); 
      intent.setComponent(cn); 
      intent.putExtra(":settings:show_fragment", "NotificationAccessSettings"); 
      context.startActivity(intent); 
      return true; 
    } catch(Exception ex) { 
      ex.printStackTrace(); 
    } 
    return false; 
  } 
} 
通知使用権があるかどうかを判断する。

private boolean notificationListenerEnable() { 
  boolean enable = false; 
  String packageName = getPackageName(); 
  String flat= Settings.Secure.getString(getContentResolver(),"enabled_notification_listeners"); 
  if (flat != null) { 
    enable= flat.contains(packageName); 
  } 
  return enable; 
} 
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。