- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个监听云消息的广播接收器,我可以很好地显示通知,但是当用户单击通知时,我想将他们路由到带有 intent extras 的正确 Activity 。额外的总是空的。
我可以验证传递给挂起 Intent 的 Intent 在调试时确实有额外的东西。
我尝试了解 Activity onCreate() 方法中的 Intent
***编辑添加工作代码,有几点需要注意,如果任务已经开始,你不能指望调用 oncreate() 方法,所以看起来最好的地方是获得额外的东西onresume 方法。我需要在 Intent 和未决 Intent 上设置标志
@EReceiver
public class MyBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "googlecloudmessage";
private static final int NOTIFICATION_ID = 1;
private NotificationManager mNotificationManager;
private NotificationCompat.Builder builder;
private Context ctx;
@Pref
public MyPrefs_ myPrefs;
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "received gcm message");
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
this.ctx = context;
String messageType = gcm.getMessageType(intent);
if (messageType != null) {
if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
}
else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
}
else if (messageType.equalsIgnoreCase("gcm")) {
myPrefs.notification().put(true);
handleNotification(intent);
}
}
setResultCode(Activity.RESULT_OK);
}
private void handleNotification(Intent intent) {
Bundle bundle = intent.getExtras();
String typeString = bundle.getString("type");
String icon = bundle.getString("icon");
String title = null;
String body = null;
Class<?> intentClass = null;
Integer intentExtraId = null;
if (typeString == null)
return;
int type = Integer.parseInt(typeString);
switch (type) {
case 1:
intentClass = FriendsActivity_.class;
title = bundle.getString("username");
break;
case 2:
intentClass = UserProfileActivity_.class;
title = bundle.getString("username");
intentExtraId = Integer.parseInt(bundle.getString("user_id"));
break;
}
mNotificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
Intent i = new Intent();
i.setClass(ctx, intentClass);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("gcm", true);
if (intentExtraId != null) {
i.putExtra("id", intentExtraId);
}
int requestID = (int) System.currentTimeMillis();
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, requestID, i, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ctx);
mBuilder.setSmallIcon(R.drawable.ic_stat_u);
Bitmap bmp = null;
try {
bmp = Ion.with(ctx, ctx.getResources().getString(R.string.image_container) + icon).asBitmap().get();
}
catch (InterruptedException e) {
e.printStackTrace();
}
catch (ExecutionException e) {
e.printStackTrace();
}
if (icon != null) {
mBuilder.setLargeIcon(bmp);
}
mBuilder.setContentTitle(title).setStyle(new NotificationCompat.BigTextStyle().bigText(body))
.setContentText(body);
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
Activity
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
@Override
protected void onResume() {
super.onResume();
Integer newId = getIntent().getExtras().getInt("id");
id = newId;
}
最佳答案
这是您用来获取 PendingIntent
的调用:
PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, i, 0);
如果系统中已经有一个匹配的PendingIntent
,这个调用将只返回那个。它可能包含也可能不包含您想要的额外内容。为确保您的附加功能得到使用,您必须确保更新任何当前的 PendingIntent
,如下所示:
PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
关于android - 将 intent extras 从谷歌云消息接收器传递到 Activity 是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20562898/
我正在将 ansible 合并到我们的内部 RHN 卫星中。我有来自 Red Hat 的完全更新的 RHEL 7 基础 repo 、附加、补充、可选和 RHN 工具。当我们需要它们时,我还会将选定的包
我尝试将一些值发送到另一个 Activity 。 recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicatio
我有这个代码: Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.s
几天前,我一直在努力寻找一种方法来为我的闹钟使用自定义 Intent 。虽然我得到了明确的答案,但我必须根据一些唯一的 ID 来定制 Intent,例如。 setAction()还是有一些问题。 我这
通知正在提供旧值。我阅读了 stackoverflow 链接,但仍然不适合我: Notification passes old Intent Extras 我有一个 Activity A。当我在 Ac
我想写以下内容: result = [] for x in list(range(10)): if x%2 != 0: for a in [1,2]:
我在使用 mysql 5.5.12 时遇到了 Amazon RDS 的 IO 性能问题。有 2 种实例类型相似且价格接近: 超大数据库实例:15 GB 内存、8 个 ECU(4 个虚拟核心,每个 2
这里是 Android 的新手,我正在与一位资深人士就 bundle 和 Intent 进行辩论。这就是我一直在做的...... Intent intent = new Intent(this, Ta
我使用的是MinGW+MSYS, 我添加了 extra-include-dirs、extra-lib-dirs,但似乎没有任何东西可以帮助 cabal 找到 PCRE 库。以下是我尝试过的一些命令行,
我已将 CVS 中的一个模块 check out 到新安装的 Windows 7 计算机上。病毒扫描程序尚未安装。 后来,当我尝试进行更新时,收到以下错误消息: 无法将文件 CVS/Entries.E
Alpine镜像中的telnet在3.7版本后被转移至busybox-extras包中,需要使用apk单独安装。 现象 Alpine版本为3.8, 不再有指向busybox的telent
对lazy="extra"究竟能做什么,有没有很好的解释? 我看过的所有帖子都只是重复了一个事实,即它会引用 MyObject.ItsCollection.Count进入 select count(*
这个问题已经有答案了: Two semicolons inside a for-loop parentheses (4 个回答) Endless loop in C/C++ [closed] (12
我的包为包含的额外内容返回空字符串。不是 NPE,是实际的“空”值。关于为什么会发生这种情况的任何想法? 新 bundle String u = nul
在 es6 中,以下似乎是有效代码: function test(a1,{a=1,b=2} = {},) {} 注意函数参数中额外的,。我不确定这是否是一个错误,因为这个额外的 , 仅适用于解构分配。
我正在查看一个包含 .myClass a.extra{...} 和 .myClass a.extra:hover{...} 的 css 模板“额外”是什么意思? 最佳答案 extra 是类名。 因为你
我来自 Web 开发的前端世界,我们非常努力地尝试限制发出的 HTTP 请求的数量(通过合并 css、js 文件、图像等)。 对于数据库连接 (MySQL),显然您不希望有不必要的连接,但作为一般规则
问题是关于包含不必要的 header 以避免在子文件中多次调用它。这是场景,我有几个文件: srlogger.h srinterface.h srinterface.cc #include #inc
我有一个程序表现出奇怪的行为 #include #include using namespace std; class man{ int i ; public:
本文整理了Java中org.threeten.extra.YearQuarter类的一些代码示例,展示了YearQuarter类的具体用法。这些代码示例主要来源于Github/Stackoverflo
我是一名优秀的程序员,十分优秀!