2014-12-05 70 views
0

我试过了大约20个不同的StackOverflow答案和NONE正在工作!PendingIntent没有从通知中启动

只想从我的通知中启动一项活动。它不工作。它没有做任何事情,如果我去我的主屏幕并点击它,它甚至不会启动应用程序。

我从一开始就添加了一堆东西,所以很抱歉所有可能甚至不需要的东西。我只是继续寻找和尝试解决方案。

private void sendNotification(String msg, String cont, String title) { 
    mNotificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); 
    //  this.getSystemService(Context.NOTIFICATION_SERVICE); 
Log.d("msg",msg); 

int requestID = (int) System.currentTimeMillis(); 
Intent notificationIntent = new Intent(getApplicationContext(), WalkerRequest.class); 
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
Log.d("Intent","setting content intent"); 
PendingIntent contentIntent = PendingIntent.getActivity(this, requestID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT 
     | PendingIntent.FLAG_ONE_SHOT); 

NotificationCompat.Builder mBuilder = 
     new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.paw_icon) 
       .setContentTitle(title) 
       .setStyle(new NotificationCompat.BigTextStyle() 
         .bigText(cont)) 
       .setContentText(cont); 
mBuilder.setContentIntent(contentIntent); 
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 
} 

这里是满级,从谷歌的直接相当多...

public class GcmIntentService extends IntentService { 
    public static final int NOTIFICATION_ID = 1; 
    private NotificationManager mNotificationManager; 
    NotificationCompat.Builder builder; 

    public GcmIntentService() { 
     super("GcmIntentService"); 
    } 
    public static final String TAG = "GCM Demo"; 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Bundle extras = intent.getExtras(); 
     GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); 
     // The getMessageType() intent parameter must be the intent you received 
     // in your BroadcastReceiver. 
     String messageType = gcm.getMessageType(intent); 

     if (!extras.isEmpty()) { // has effect of unparcelling Bundle 
      /* 
      * Filter messages based on message type. Since it is likely that GCM will be 
      * extended in the future with new message types, just ignore any message types you're 
      * not interested in, or that you don't recognize. 
      */ 
      if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { 
       sendNotification("Send error: ", extras.toString(), "Nada"); 
      } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) { 
       sendNotification("Deleted messages on server: ", extras.toString(), "nada"); 
       // If it's a regular GCM message, do some work. 
      } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) { 
       // This loop represents the service doing some work. 
       for (int i = 0; i < 5; i++) { 
        Log.i(TAG, "Working... " + (i + 1) 
          + "/5 @ " + SystemClock.elapsedRealtime()); 
        try { 
         Thread.sleep(500); 
        } catch (InterruptedException e) { 
        } 
       } 
       String cont = intent.getExtras().getString("message"); 
       String title = intent.getExtras().getString("title"); 

       Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime()); 
       // Post notification of received message. 
       sendNotification("Received: ", cont, title); 
       Log.i(TAG, "Received: " + extras.toString()); 
      } 
     } 
     // Release the wake lock provided by the WakefulBroadcastReceiver. 
     GcmBroadcastReceiver.completeWakefulIntent(intent); 
    } 

    // Put the message into a notification and post it. 
    // This is just one simple example of what you might choose to do with 
    // a GCM message. 

    private void sendNotification(String msg, String cont, String title) { 
     mNotificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); 
     //  this.getSystemService(Context.NOTIFICATION_SERVICE); 

     Log.d("msg",msg); 

     int requestID = (int) System.currentTimeMillis(); 
     Intent notificationIntent = new Intent(getApplicationContext(), WalkerRequest.class); 
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     Log.d("Intent","setting content intent"); 
     PendingIntent contentIntent = PendingIntent.getActivity(getBaseContext(), requestID, notificationIntent, PendingIntent.FLAG_ONE_SHOT); 

     NotificationCompat.Builder mBuilder = 
       new NotificationCompat.Builder(this) 
         .setSmallIcon(R.drawable.paw_icon) 
         .setContentTitle(title) 
         .setStyle(new NotificationCompat.BigTextStyle() 
           .bigText(cont)) 
         .setContentText(cont); 
     mBuilder.setContentIntent(contentIntent); 
     mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 
    } 
} 

这里是接收

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Explicitly specify that GcmIntentService will handle the intent. 
     ComponentName comp = new ComponentName(context.getPackageName(), 
       GcmIntentService.class.getName()); 
     // Start the service, keeping the device awake while it is launching. 
     startWakefulService(context, (intent.setComponent(comp))); 
     setResultCode(Activity.RESULT_OK); 
    } 
} 
+0

尝试而不是.getActivity(this,.....尝试.getActivity(getBaseContext,..... – JLONG 2014-12-05 03:48:46

+0

是的,我以前也有过,不适合我 – user1610719 2014-12-05 04:16:49

回答

1

getApplicationContext()当你的应用程序不处于活动状态时,将无法使用,所以更好使用该服务的context

我的建议是通过方法来在推送通知的意图被接受的地方回来尽可能追查,并更改被向下传递到onReceive()方法不管上下文,并与getApplicationContext()context更换然后你可以使用方法中的上下文参数。

+0

嘿,我很遗憾不明白你在说什么,谨慎提供一些示例代码?对不起! – user1610719 2014-12-05 03:55:05

+0

我正在编辑帖子的类别的全部代码 – user1610719 2014-12-05 03:56:05

+0

你可以发布你的服务代码,我会建议你改变什么 – 2014-12-05 03:56:10

-1

试试这个:public void createNotification() { try { Intent pnIntent = new Intent(this, newActivity.class); pnIntent.putExtra("notificationId", NOTIFICATION_ID); PendingIntent pendingIntent = PendingIntent.getActivity(this, 01, pnIntent, Intent.FLAG_ACTIVITY_CLEAR_TASK); NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()); builder.setContentTitle(getString(R.string.app_name)); builder.setContentText(getString(R.string.running)); builder.setContentIntent(pendingIntent); builder.setSmallIcon(R.drawable.ic_stat_permanent_notification); builder.setAutoCancel(false); builder.setOngoing(true); builder.setPriority(1); Notification notification = builder.build(); final NotificationManager notificationManger = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManger.notify(permanentNotificationId, notification); } catch (Exception e) { Log.e("UnityApplication", "Error while creating notification", e); } }

+0

有一堆错误这...例如Intent.FLAG_ACTIVITY_CLEAR_TASK有一个错误,基本上说我不能使用该选项 – user1610719 2014-12-05 03:50:49

+0

它在这里工作。 – 2014-12-05 04:15:03