我正在我的应用程序中实施谷歌云消息服务(GCM)。我使用gcmIntent服务创建了一个挂起的意图并打开了一个不是启动活动的活动。当应用程序打开时,它工作正常。但当应用程序关闭时,它会打开启动活动而不是所需的活动。我尝试了我能找到的所有解决方案,但都不起作用。我挣扎了一个多星期。任何帮助都将不胜感激。
我的代码
public class GcmIntentService extends IntentService {
public static final int NOTIFICATION_ID = 1;
private NotificationManager mNotificationManager;
Notification notification;
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);
String messageType = gcm.getMessageType(intent);
if (!extras.isEmpty()) {
if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
} else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
} else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
String [] message={extras.getString("abc"),extras.getString("zyx"),extras.getString("123"),extras.getString("456")};
if(UserDetails.getPushNotificationStatus(this)){
sendNotification(message);
}
}
}
GCMBroadcastReceiver.completeWakefulIntent(intent);
}
private void sendNotification(String[] msg) {
mNotificationManager = (NotificationManager)
this.getSystemService(Context.NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent(getBaseContext(), ShowShoutComment.class);
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent =
PendingIntent.getActivity(getBaseContext(), 0, notificationIntent, 0);
Uri notificationUri = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setLargeIcon(remote_picture)
.setContentText(Html.fromHtml(msg[2]))
.setContentTitle("Shout")
.setSound(notificationUri)
.setStyle(new NotificationCompat.BigTextStyle().bigText(Html.fromHtml(msg[2])));
mBuilder.setContentIntent(contentIntent);
notification = new Notification();
notification = mBuilder.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
notification.defaults |= Notification.DEFAULT_LIGHTS;
mNotificationManager.notify(NOTIFICATION_ID, notification);
}
}
我得到下面的堆栈跟踪
05-20 09:47:44.926: I/ActivityManager(753): START u0 {cmp=com.shout.shout/.activities.ShowShoutComment bnds=[0,153][1080,441]} from pid -1
05-20 09:47:44.926: W/ActivityManager(753): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { cmp=com.shout.shout/.activities.ShowShoutComment bnds=[0,153][1080,441] }
05-20 09:47:44.976: I/ActivityManager(753): Start proc com.shout.shout for activity com.shout.shout/.activities.ShowShoutComment: pid=4742 uid=10195 gids={50195, 3003, 1028, 1015}
05-20 09:47:45.016: W/ActivityThread(4742): Application com.shout.shout can be debugged on port 8100...
05-20 09:47:45.146: I/ActivityManager(753): START u0 {flg=0x4000000 cmp=com.shout.shout/.activities.ShoutFeed} from pid 4742
05-20 09:47:45.626: I/ActivityManager(753): Displayed com.shout.shout/.activities.ShoutFeed: +476ms (total +668ms)
做了一些改变。
private void sendNotification(Context context,String[] msg) {
....
Intent notificationIntent = new Intent(context, ShowShoutComment.class);
....
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
...
}
把它放在你的上面(服务类)
Intent intent2 = new Intent(context, yourDesiredActivity.class);
intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent2, 0);
希望这对你有帮助。
当用户在我的通知中单击一个按钮时,我正试图打开,而该应用程序仅在后台运行并提供服务。单击按钮时,这些行在类中被触发: 我已经检查过了,这些行被触发了,所以对按钮的点击做出反应没有问题,但是不会打开。 有什么建议吗?为什么这对我不起作用,我怎么能让它起作用? 我被要求提供更多的代码,因此在我的
我知道这个问题似乎重复,但为了我的要求,我已经在网上搜索了很多帖子,但没有一个对我有效。 我的要求 为此,我尝试了以下场景 情景1 使用将通知数据从传输到Launcher/Main活动,并根据bundle数据重定向到特定活动/片段 情景3 通过使用 按照上面的场景,当应用程序打开时,一切工作都很好,但如果我的应用程序关闭了,则意味着它总是重定向到main/launcher活动
是上面的代码少了点什么,还是有什么其他的方式可以在所有android版本上工作? 请建议。多谢了。
我目前正在从android站点上了解导航抽屉,我正在使用他们的示例http://developer.android.com/training/implementation-navigation/nav-drawer.html 我想要的是在中添加一个按钮,它将能够打开。我需要以编程方式完成,而不是XML。我怎么能那样做?
启动 1. 轻触主画面上您想启动的应用程序图标。 显示LiveArea™。 2. 轻触[开始]。 中断/继续 按下PS键即可返回LiveArea™。若要继续,请轻触[继续]。 关闭 1. 按下PS键。 返回LiveArea™。 2. 请由画面右上角将LiveArea™撕下。
下面是我得到的audit4j:info初始化audit4j······audit4j:信息加载配置...AUDIT4J:信息验证配置...audit4j:info正在初始化处理程序...audit4j:info org.audit4j.core.handler.consoleAuditHandler已初始化。audit4j:info org.audit4j.core.handler.file.Fi