尝试为前N个手机创buildWhatsapps快速回复

如果您点击通知上的快速回复button,我正尝试创build一个小窗口。 在WhatsApp它打开了一个半屏窗口。 目前我正在做以下工作:

我打开了一个名为NotificationActivity的活动。 在AndroidManifest.xml我将活动注册为一个

 <activity android:name=".activity.NotificationActivity" android:theme="@style/Theme.AppCompat.Light.Dialog.custom" android:label="@string/title_activity_notification" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize|stateHidden" /> 

这是风格:

 <style name="Theme.AppCompat.Light.Dialog.custom"> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> </style> 

现在,当应用程序完全closures(closures,然后刷掉),它完美的作品。

但是,如果应用程序只是最小化,当有人点击回复button,它打开了应用程序,然后粘贴NotificationActivity。 如何防止在后台打开应用程序,并只打开半屏通知活动。

非常感谢

编辑:我在想也许这个XML文件是相关的?

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="300dp" android:layout_marginTop="15dp" android:background="@color/white" android:orientation="vertical" android:paddingTop="12dp" android:weightSum="20"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/lvChat" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="10" android:background="@android:color/transparent" android:cacheColorHint="@android:color/transparent" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:listSelector="@android:color/transparent" android:scrollbars="none" android:stackFromBottom="false" android:transcriptMode="alwaysScroll"/> <LinearLayout android:id="@+id/chatFooter" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ECEFF1" android:orientation="horizontal"> <LinearLayout android:id="@+id/sendLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:paddingBottom="@dimen/scale_5dp" android:paddingTop="@dimen/scale_5dp" android:weightSum="2"> <LinearLayout android:layout_width='0dp' android:layout_height="wrap_content" android:layout_weight="1.8"> <com.heyjude.heyjudeapp.customview.EditRobotoRegular android:id="@+id/editChatMsg" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/linear_back" android:hint="Type your message..." android:imeOptions="actionSend" android:inputType="textMultiLine|textCapSentences|text" android:padding="@dimen/scale_5dp" android:textColor="#5f6060" android:textColorHint="#5f6060" android:textSize="@dimen/text_14"/> </LinearLayout> <ImageButton android:id="@+id/ivSend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.3" android:background="@android:color/transparent" android:src="@drawable/ic_chat_icon"/> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@color/grey_list" android:gravity="center" android:orientation="horizontal" android:weightSum="2"> <Button android:id="@+id/buttonView" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="View" android:textAllCaps="false" android:textSize="@dimen/text_22"/> <Button android:id="@+id/buttonCancel" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="Cancel" android:textAllCaps="false" android:textSize="@dimen/text_22"/> </LinearLayout> </LinearLayout> </LinearLayout> 

也不知道这是否相关,但这是我如何创build答复

 String KEY_TEXT_REPLY = "key_text_reply"; String replyLabel = "Type here"; Intent intent = new Intent(context, NotificationActivity.class); intent.putExtra(Constants.REQUEST_ID, messageData.taskid); intent.putExtra(Constants.JUDE_ID, messageData.from); intent.putExtra(Constants.FROM, Constants.NOTIFICATION); PendingIntent pendingIntent = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) .setLabel(replyLabel) .build(); NotificationCompat.Action replyAction = new NotificationCompat.Action.Builder( R.drawable.send_button, "Reply", pendingIntent) .addRemoteInput(remoteInput) .build(); builder.addAction(replyAction); 

Solutions Collecting From Web of "尝试为前N个手机创buildWhatsapps快速回复"

要实现你想要的,你需要使用值为singleInstance的属性android:launchMode

"singleTask"相同,只是系统不会向持有实例的任务中启动任何其他活动。 该活动始终是其任务的唯一成员。

您还应该添加android:excludeFromRecents="true" ,将您的活动从最近使用的应用程序列表中排除,如文档所述 :

总览屏幕是否应该从最近使用的应用程序列表中排除此活动启动的任务。 也就是说,当此活动是新任务的根活动时,此属性将确定该任务是否不应出现在最近的应用程序列表中。 如果任务应该从列表中排除,则设置为“真” 如果应该包括“假”的话。 默认值是“false”。

总结一下,你需要像这样改变你的AndroidManifest.xml

 <activity android:name=".activity.NotificationActivity" android:theme="@style/Theme.AppCompat.Light.Dialog.custom" android:label="@string/title_activity_notification" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize|stateHidden" android:launchMode="singleInstance" android:excludeFromRecents="true" /> 

要按照此处所述从通知开始一个特殊的活动

对于这种情况,请设置PendingIntent以开始新的任务。 不过,不需要创build一个返回堆栈,因为启动的Activity不是应用程序活动stream的一部分。 点击返回仍然会将用户带到主屏幕。

一个特殊的Activity不需要返回栈,所以你不必在清单中定义它的Activity层次结构,也不必调用addParentStack()来构build一个后退栈。 相反,使用清单来设置Activity任务选项,并通过调用getActivity()创buildPendingIntent

  1. 清单中 ,将以下属性添加到

    元素的活动

     android:name="activityclass" 

    该活动的完全合格的类名称。

     android:taskAffinity="" 

    结合您在代码中设置的FLAG_ACTIVITY_NEW_TASK标志,可以确保该Activity不会进入应用程序的默认任务。 任何具有应用程序默认亲和力的现有任务均不受影响。

     android:excludeFromRecents="true" 

    不包括来自“最近”的新任务,以便用户不会意外地回到它。

代码片段

 <activity android:name=".YourActivity" android:theme="@style/Theme.AppCompat.Light.Dialog.custom" ... android:launchMode="singleTask" android:taskAffinity="" android:excludeFromRecents="true"> </activity> 
  1. build立和发布通知(虽然你已经这样做了,但我build议你检查一下):

    • 创build一个启动Activity的Intent。

    • 通过调用带有标志FLAG_ACTIVITY_NEW_TASKsetFlags() ,将Activity设置为一个新的空任务。

    • 为意图设置您需要的其他选项。

    • 通过调用getActivity()从Intent创build一个PendingIntent 。 然后,您可以使用此PendingIntent作为setContentIntent()的参数。

代码片段。

 // Instantiate a Builder object. NotificationCompat.Builder builder = new NotificationCompat.Builder(this); // Creates an Intent for the Activity Intent notifyIntent = new Intent(this, ResultActivity.class); // Sets the Activity to start in a new, empty task notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // Creates the PendingIntent PendingIntent notifyPendingIntent = PendingIntent.getActivity( this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT ); // Puts the PendingIntent into the notification builder builder.setContentIntent(notifyPendingIntent); // Notifications are issued by sending them to the // NotificationManager system service. NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // Builds an anonymous Notification object from the builder, and // passes it to the NotificationManager mNotificationManager.notify(id, builder.build()); 

如果需要,也请查看这个官方文档 。

希望这会帮助你。