AndroidアプリでStatusBarManagerという非公開(API level 29から公式化?)のAPIを利用して、Notificationパネル(プッシュ通知一覧のやつ)の表示オンオフする方法を説明します。
StatusBarManagerソースコード
StatusBarManagerのソースコードはここにあります。
必要なパーミッション
以下をAndroidManifest.xmlに追加する必要があります。runtimeパーミッションではないので、AndroidManifest.xmlに追加するだけでOKです。
AndroidManifest.xml
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
ソースコード
非公開扱いのクラスのため、何が起きてもいいようにtry/catchは入れておきましょう。パネルを開く場合は、android.app.StatusBarManager.expandNotificationsPanelをコールします。
パネルを開くサンプル
if(ContextCompat.checkSelfPermission(this, Manifest.permission.EXPAND_STATUS_BAR) != PackageManager.PERMISSION_GRANTED)
return;
try {
Object service = getSystemService("statusbar");
Class<?> statusBarManager = Class.forName("android.app.StatusBarManager");
Method expand = statusBarManager.getMethod("expandNotificationsPanel");
expand.invoke(service);
}
catch (Exception e){
e.printStackTrace();
}
逆にパネルを閉じる場合は、クイック設定画面も同時に閉じる事になりますが、android.app.StatusBarManager.collapsePanelsをコールします。
パネルを閉じるサンプル
if(ContextCompat.checkSelfPermission(this, Manifest.permission.EXPAND_STATUS_BAR) != PackageManager.PERMISSION_GRANTED)
return;
try {
Object service = getSystemService("statusbar");
Class<?> statusBarManager = Class.forName("android.app.StatusBarManager");
Method expand = statusBarManager.getMethod("collapsePanels");
expand.invoke(service);
}
catch (Exception e){
e.printStackTrace();
}