从服务发出的通知打开 activity 无效
Opening activity from notification issued from service not working
我在尝试打开 activity 从我的应用程序从我设置的应用程序服务器收到的通知时遇到了非常糟糕的时间。当用户登录处理接收通知的应用程序服务器时,我有一个 android 服务 运行 。当用户单击通知时,应该会启动名为 "Notifications" 的 activity。 Android服务上的相关代码:
int requestID = (int) System.currentTimeMillis();
Intent intent = new Intent();
intent.setComponent(new ComponentName(this, Notifications.class));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
//intent.putExtra("json", message);
PendingIntent pintent = PendingIntent.getActivity(this, requestID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
然后,设置通知的标题和文本后:
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.plus)
.setContentTitle(title)
.setContentText(caption)
.setContentIntent(pintent)
.setLights(Color.BLUE, 1000, 1000)
.setVibrate(new long[] {0, 100, 100, 100});
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(100, mBuilder.build());
Notifications
Activity 的全部内容:
package com.myapp;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
public class Notifications extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notifications);
}
}
我已经在清单文件中声明了我的 Activity:
<activity
android:name=".Notifications"
android:label="@string/title_activity_notifications"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true">
</activity>
令我感到困惑的是,这个特定的 activity 无法打开 - 我尝试将其设置为打开其他活动,然后它工作得很好。这是我的 logcat 从我点击通知的那一刻起:
04-26 23:43:33.301: D/StatusBar(896): Clicked on content of 0|com.myapp|100|null|10107
04-26 23:43:33.312: I/ActivityManager(725): START u0 {flg=0x10008000 cmp=com.myapp/com.google.android.gms.games.Notifications (has extras)} from uid 10107 on display 0
04-26 23:43:33.315: D/audio_hw_primary(189): out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2
04-26 23:43:33.322: W/InputMethodManagerService(725): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@6bbbbe3 attribute=null, token = android.os.BinderProxy@2c3766bc
04-26 23:43:33.326: D/audio_hw_primary(189): select_devices: out_snd_device(2: speaker) in_snd_device(0: none)
04-26 23:43:33.326: D/msm8974_platform(189): platform_send_audio_calibration: sending audio calibration for snd_device(2) acdb_id(15)
04-26 23:43:33.326: D/audio_hw_primary(189): enable_snd_device: snd_device(2: speaker)
04-26 23:43:33.330: D/audio_hw_primary(189): enable_audio_route: apply and update mixer path: low-latency-playback
04-26 23:43:33.703: D/PhoneStatusBar(896): disable: < expand icons* alerts system_info* back home recent clock search >
是否与logcat中看到的com.google.android.gms.games.Notifications
文字有关?我在 Nexus 5 上 运行ning Android 5.1。
编辑
因此,我将 Activity 重命名为 Notification
,现在一切正常。对于为什么它一开始就失败,我没有合适的解释,所以我将把这个问题留在上面 until/if 有人可能会充分解释一开始发生的事情,因为我不是现在要花更多时间在这上面了。
很清楚发生了什么。您有此代码来设置通知 Intent
:
intent.setComponent(new ComponentName(this, Notifications.class));
您必须导入包 com.google.android.gms.games
以便编译器使用 com.google.android.gms.games.Notifications
而不是您自己的 class。当您更改 class 的名称时,编译器能够选择正确的 class。看看你的 import
声明。
我在尝试打开 activity 从我的应用程序从我设置的应用程序服务器收到的通知时遇到了非常糟糕的时间。当用户登录处理接收通知的应用程序服务器时,我有一个 android 服务 运行 。当用户单击通知时,应该会启动名为 "Notifications" 的 activity。 Android服务上的相关代码:
int requestID = (int) System.currentTimeMillis();
Intent intent = new Intent();
intent.setComponent(new ComponentName(this, Notifications.class));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
//intent.putExtra("json", message);
PendingIntent pintent = PendingIntent.getActivity(this, requestID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
然后,设置通知的标题和文本后:
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.plus)
.setContentTitle(title)
.setContentText(caption)
.setContentIntent(pintent)
.setLights(Color.BLUE, 1000, 1000)
.setVibrate(new long[] {0, 100, 100, 100});
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(100, mBuilder.build());
Notifications
Activity 的全部内容:
package com.myapp;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
public class Notifications extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notifications);
}
}
我已经在清单文件中声明了我的 Activity:
<activity
android:name=".Notifications"
android:label="@string/title_activity_notifications"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true">
</activity>
令我感到困惑的是,这个特定的 activity 无法打开 - 我尝试将其设置为打开其他活动,然后它工作得很好。这是我的 logcat 从我点击通知的那一刻起:
04-26 23:43:33.301: D/StatusBar(896): Clicked on content of 0|com.myapp|100|null|10107
04-26 23:43:33.312: I/ActivityManager(725): START u0 {flg=0x10008000 cmp=com.myapp/com.google.android.gms.games.Notifications (has extras)} from uid 10107 on display 0
04-26 23:43:33.315: D/audio_hw_primary(189): out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2
04-26 23:43:33.322: W/InputMethodManagerService(725): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@6bbbbe3 attribute=null, token = android.os.BinderProxy@2c3766bc
04-26 23:43:33.326: D/audio_hw_primary(189): select_devices: out_snd_device(2: speaker) in_snd_device(0: none)
04-26 23:43:33.326: D/msm8974_platform(189): platform_send_audio_calibration: sending audio calibration for snd_device(2) acdb_id(15)
04-26 23:43:33.326: D/audio_hw_primary(189): enable_snd_device: snd_device(2: speaker)
04-26 23:43:33.330: D/audio_hw_primary(189): enable_audio_route: apply and update mixer path: low-latency-playback
04-26 23:43:33.703: D/PhoneStatusBar(896): disable: < expand icons* alerts system_info* back home recent clock search >
是否与logcat中看到的com.google.android.gms.games.Notifications
文字有关?我在 Nexus 5 上 运行ning Android 5.1。
编辑
因此,我将 Activity 重命名为 Notification
,现在一切正常。对于为什么它一开始就失败,我没有合适的解释,所以我将把这个问题留在上面 until/if 有人可能会充分解释一开始发生的事情,因为我不是现在要花更多时间在这上面了。
很清楚发生了什么。您有此代码来设置通知 Intent
:
intent.setComponent(new ComponentName(this, Notifications.class));
您必须导入包 com.google.android.gms.games
以便编译器使用 com.google.android.gms.games.Notifications
而不是您自己的 class。当您更改 class 的名称时,编译器能够选择正确的 class。看看你的 import
声明。