通知中的setOnClickPendingIntent不能在android N上运行吗?细节:它需要点击两次?为什么?

时间:2017-01-05 03:02:07

标签: android android-pendingintent

代码:

intent = new Intent(ACTION_STOP);
intent.setClass(context, SoundRecorderService.class);
pIntent = PendingIntent.getService(context, 0, intent, 0);
mNotificationView.setOnClickPendingIntent(R.id.btn_stop, pIntent);

Notification.Builder builder=new Notification.Builder(context);
Notification notification = builder.build();
notification.contentView = mNotificationView;
notification.flags |= Notification.FLAG_ONGOING_EVENT;

notification.icon = R.drawable.notification_ic_small;
notification.contentIntent = pIntent;
startForeground(START_NOTIFICATION_ID, notification);

这些代码在android M中表现良好。但它在android N中执行异常。当我们第一次点击btn_stop按钮时,电话系统不会发送此PendingIntent,因此它不会启动SoundRecorderService.class。然后我们再次点击它,它的工作原理。

2 个答案:

答案 0 :(得分:0)

抱歉!我的通知remoteview布局修复了一个点,错误代码:

<ImageView
            android:id="@+id/btn_stop"
            android:layout_width="17dp"
            android:layout_height="17dp"
            android:layout_gravity="center_vertical"
            android:background="@drawable/notification_background"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:src="@drawable/notification_stop"

机器人:focusableInTouchMode =&#34;真&#34;修复android:clickable =&#34; true&#34;正确的代码:

<ImageView
            android:id="@+id/btn_stop"
            android:layout_width="17dp"
            android:layout_height="17dp"
            android:layout_gravity="center_vertical"
            android:focusable="true"
            android:clickable="true"
            android:src="@drawable/notification_stop" />

答案 1 :(得分:0)

该错误在模拟器上清晰可见,您可以在同一点上进行任意数量的点击。该错误的本质是在自定义通知区域中定期丢失点击。这些代码在Android L,M和O中表现良好。

如果ImageButton的高度设置为“match_parent”,那么简单布局示例没有工作点击。对我有用的解决方案是设置一个特定的高度值(“64dp”)。

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="horizontal"
  tools:layout_height="64dp">

  <FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_weight="1">

    <ImageButton
      android:id="@+id/button_1"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_gravity="center"
      android:src="@drawable/ic_notify_1"/>
  </FrameLayout>      
</LinearLayout>