从服务无效的通知中打开活动

时间:2015-04-27 05:21:19

标签: push-notification android-pendingintent

我尝试通过我的应用从我已设置的应用服务器收到的通知中打开活动时非常糟糕。我有一个Android服务,当用户登录到处理接收通知的应用服务器时运行。一项名为" Notifications"应该在用户点击通知时启动。 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活动的全部内容:

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
    android:name=".Notifications"
    android:label="@string/title_activity_notifications"
    android:screenOrientation="portrait"
    android:launchMode="singleTask"
    android:taskAffinity=""
    android:excludeFromRecents="true">
</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上运行Android 5.1。

修改

所以,我将活动重命名为Notification,现在一切都很顺利。我没有一个合适的解释,为什么它首先失败了,所以我要留下这个问题直到/如果有人可以充分解释首先发生的事情,因为我&# 39;我现在不打算花更多的时间。

1 个答案:

答案 0 :(得分:0)

很清楚发生了什么。您可以使用此代码设置通知p_R = P1*R1*P_C

Intent

您必须已导入包intent.setComponent(new ComponentName(this, Notifications.class)); ,以便编译器使用com.google.android.gms.games而不是您自己的类。当您更改类的名称时,编译器能够选择正确的类。看看你的com.google.android.gms.games.Notifications陈述。