我想在status bar
中不断显示小图标,而不会在系统的notification
托盘上显示通知。
我尝试使用自定义layout
并将根元素的可见性设置为View.GONE
或View.INVISIBLE
,但对于两者,系统会忽略它。
我也尝试设置根元素的高度,但系统也忽略了它。
这是我的代码:
R.layout.custom_notification
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/custom_notification"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/notif_background"
android:orientation="horizontal"
android:baselineAligned="false"/>
显示Notification
的代码:
NotificationManager nm = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ctx);
mBuilder
.setSmallIcon(drawableId)
.setAutoCancel(false)
.setOngoing(true)
.setPriority(Notification.PRIORITY_MAX);
Intent resultIntent = new Intent(ctx, SettingsActivity.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(ctx, 0, resultIntent, 0);
mBuilder.setContentIntent(resultPendingIntent);
int layout = R.layout.custom_notification ;
RemoteViews contentView = new RemoteViews(ctx.getPackageName(), layout);
contentView.setViewVisibility(R.id.custom_notification, View.INVISIBLE);
mBuilder.setContent(contentView);
nm.notify(NOTIFICATION_ID, mBuilder.build());
我很清楚,为了实现我的目标,我不需要记录解决方案。而且我也知道UX准则强烈建议不做这样的事情。所以没有必要把这个作为答案写给我。
答案 0 :(得分:10)
根据开发人员文档显示图标而不显示任何相关通知,这不是一个好主意
状态栏通知需要以下所有内容:
因此,如果您不想破坏用户体验,那么强烈建议您遵循用户体验指南,
逻辑上:状态栏有两部分 - 用户(通知)和系统(其他)。如果系统允许将某些东西放到系统部分 - 会有太多无用的图标(由其他应用程序发布),并且没有一致性,并且可能会破坏所有使用体验。
找到答案,为您提供访问警报here的默认状态栏图标的方法。根你的手机你可以做到这一点。在youtube上做一些技巧,同一主题的一些答案建议使用通知显示图标,但将通知文本设置为空,这样用户只能看到图标,但是再次&#39 ;不是一种方式。
This is code对于系统中的状态栏实现,其中描述了左右图标(即系统图标),您可以从那里获得一些优势。描述它的答案是here。
答案 1 :(得分:6)
我建议不要使用Google Play应用程序。 有几个原因:
如果您发现有助于显示隐形通知的错误,它似乎没什么。该错误仅适用于具有特定Android版本的部分设备。请记住:使用打开的API在大多数设备中正确执行常规代码非常困难。隐藏的API不适用于所有设备。
源代码中没有此类行为:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/app/NotificationManager.java#NotificationManager.notify%28int%2Candroid.app.Notification%29。你无法找到这样的行为。
要预测行为,请使用Android的 * Compat 类。也就是说,仅用于通知NotificationCompat
类!只有使用包装器才能帮助您的应用显示通知。
这是非常丑陋的UI / UX。
通知&#39;工作流程在很大程度上取决于Android版本。
答案 2 :(得分:1)
您可以使用InputMethodService.showStatusIcon()执行此操作。但我建议您显示正常通知,并向用户说明您的应用现在做了什么。
答案 3 :(得分:0)
您可以使用RemoteViews隐藏标题和文字
R.id.notification_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp"
android:layout_marginLeft="7dp"
android:src="@drawable/icon_battery" />
</RelativeLayout>
MainActivity中的:
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_layout);
Context application = getApplicationContext();
Intent resultIntent = new Intent(application, MainActivity.class);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent resultPendingIntent = PendingIntent.getActivity(application, 0, resultIntent, 0);
NotificationManager nmgr = (NotificationManager) application.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(application)
.setSmallIcon(R.drawable.icon_battery);
mBuilder.setContent(contentView);
Notification mNotification = mBuilder.build();
// mNotification.flags |= FLAG_NO_CLEAR;
nmgr.notify(0, mNotification);
答案 4 :(得分:0)
晚了,但可能对其他人有用。
就我而言,它是如此简单,只需在您的主要自定义布局中使用高度0dp
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="0dp">
wrap_content在这里不起作用。