web-dev-qa-db-ja.com

Android O-1行の通知-「Androidシステム-このデバイスのUSB充電」など

できるだけ小さな場所を必要とするForegroundServiceの継続的な通知を希望します。 「Androidシステム-このデバイスをUSB充電する」スタイルが気に入っていますが、これを達成する方法の例を見つけることができません。 enter image description here

誰かが私を正しい方向に向けることができますか?

更新

チャネルに重要度IMPORTANCE_MINが割り当てられている場合、スタイルは通知に与えられます。

IMPORTANCE_MINの通知にForegroundServiceで使用するスタイルに組み込まれたAndroidを使用する方法はないようです。

IMPORTANCE_MINの説明は次のとおりです。

通知の最小重要度:フォールドの下の日陰でのみ表示されます。これはService.startForegroundで使用しないでください。フォアグラウンドサービスはユーザーが気にするものであるため、通知を最小重要度としてマークする意味論的な意味をなさないためです。 Android version Build.VERSION_CODES.Oの時点でこれを行うと、バックグラウンドで実行されているアプリに関する優先度の高い通知が表示されます。

26
Sobvan

元の質問に答えるには:

Android OにForegroundServiceの単一行の継続的な通知を取得する組み込みの方法はないようです。カスタムデザインを追加してみることができますが、通知用にさまざまなデザインがありますが、そのソリューションはほとんど良いものではありません。

ただし、希望はあります:)

On Android PIMPORTANCE_LOWNotificationChannelの優先度がPRIORITY_LOWisForegroundServiceであっても単一行に圧縮されます。うん!

1
Sobvan

充電通知のようなコンパクトな単一行の通知を表示するには、IMPORTANCE_MINを優先して_Notification Channel_を作成する必要があります。

_@TargetApi(Build.VERSION_CODES.O)
private static void createFgServiceChannel(Context context) {
   NotificationChannel channel = new NotificationChannel("channel_id", "Channel Name", NotificationManager.IMPORTANCE_MIN);
   NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
   mNotificationManager.createNotificationChannel(channel);
}
_

そして、そのような継続的な通知を作成します。

_public static Notification getServiceNotification(Context context) {
   NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "channel_id");
   mBuilder.setContentTitle("One line text");
   mBuilder.setSmallIcon(R.drawable.ic_notification);
   mBuilder.setProgress(0, 0, true);
   mBuilder.setOngoing(true);
   return mBuilder.build();
}
_

[〜#〜] note [〜#〜]

IntentServiceの代わりにServiceを使用してテストしたことに注意してください。また、15秒のThread.sleep()の設定を確認したところ、IntentServiceが停止するまで通知は完全に表示されます。

画像がいくつかあります(一部のテキストはスペイン語ですが、画像はまだ有用だと思います):

Single line ongoing notification

下にドラッグして通知を開くと、次のように表示されます。

Single line ongoing notification opened

[〜#〜] extra [〜#〜]

Androidシステムは、バッテリーを使用しているすべてのアプリ(継続的なサービスを備えたアプリ)を示す通知を表示します。充電通知など。

これをみて:

Battery applications

この通知を長押しして、すべてのカテゴリを選択します。

Chennel notification for battery applications

そして、重要度を低に設定します。

enter image description here

次回、この「バッテリー消費」通知は充電通知として表示されます。

5
Marc Estrada

通知の優先度を最小に、通知チャネルの重要度を最小に設定し、通知チャネルバッジの表示を無効にする必要があります。

ここに私がそれをする方法のサンプルがあります。参考のために完全な通知も作成しました

private static final int MYAPP_NOTIFICATION_ID= -793531;

NotificationManager notificationManager = (NotificationManager) context
        .getSystemService(Context.NOTIFICATION_SERVICE);

String CHANNEL_ID = "myapp_ongoing";
CharSequence name = context.getString(R.string.channel_name_ongoing);

if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.O) {
    NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, NotificationManager.IMPORTANCE_MIN);
    channel.setShowBadge(false);

    notificationManager.createNotificationChannel(channel);
}

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
        context, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_stat_notification_add_reminder)
        .setContentTitle(context.getString(R.string.app_name))
        .setContentText(context.getString(R.string.create_new))
        .setOngoing(true).setWhen(0)
        .setChannelId(CHANNEL_ID)
        .setPriority(NotificationCompat.PRIORITY_MIN);

// Creates an intent for clicking on notification
Intent resultIntent = new Intent(context, MyActivity.class);
...

// The stack builder object will contain an artificial back stack
// for the
// started Activity.
// This ensures that navigating backward from the Activity leads out
// of
// your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(MyActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
        PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);

notificationManager.notify(MYAPP_NOTIFICATION_ID, mBuilder.build());
2
CodeChimp

拡張可能な通知

デフォルトでは、通知のテキストコンテンツは1行に収まるように切り捨てられます。通知を長くしたい場合は、追加のテンプレートを適用することにより、拡大可能なより大きなテキスト領域を有効にできます。

さらに、Android 4.1は拡張可能な通知をサポートしています。通常の通知ビューに加えて、通知が展開されたときに表示される大きなビューを定義できます。大きなビューで使用する3つのスタイルがあります:大きな画像スタイル、大きなテキストスタイル、受信ボックススタイル。次のコードは、最大256 dpを使用できるBigTextStyle()の使用方法を示しています。

たとえば:

String longText = "...";

Notification noti = new Notification.Builder(this)
.....
.....
.....
.setStyle(new Notification.BigTextStyle().bigText(longText))
0
Viral Patel

次のような空のカスタムビューを作成して、フォアグラウンドサービス通知のサイズを小さくしました。

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical">


</LinearLayout>

そして、次のような通知を作成します。

RemoteViews notifiactionCollapsed = new RemoteViews(getPackageName(),R.layout.notification_collapsed);
    Notification notification = new NotificationCompat.Builder(this,CHANNEL_ID)
            .setSmallIcon(R.drawable.eq_icon)
            .setCustomContentView(notifiactionCollapsed)
            .setStyle(new NotificationCompat.DecoratedCustomViewStyle())
            .setShowWhen(false)
            .setContentIntent(pendingIntent)
            .setPriority(NotificationCompat.PRIORITY_LOW)
            .setOngoing(true)
            .setVisibility(NotificationCompat.VISIBILITY_SECRET)
            .build();
    startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE,
            notification);

これは通知の高さを減らすのに役立ちますが、それでも通知アイコンを非表示にする方法がわかりません。

0
Jazib Khan