我用a AlarmManager来启动服务.当我设置AlarmManager我使用PendingIntent并使用一个唯一的requestCode,它等于我的数据库中的id行.
PendingIntent pendingIntent = PendingIntent.getBroadcast(SettingsActivity.this,
lecture.getId(), myIntent, 0);
Run Code Online (Sandbox Code Playgroud)
如何在启动时在我的服务中检索该ID?我基本上只需要requestCode参数.我想使用该id从我的数据库中检索数据并在通知中显示它.我已经实现了所有的东西,我只需要requestCode.有可能得到它吗?
谢谢
notifications android broadcastreceiver alarmmanager android-pendingintent
我正在使用 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5' 作为 mqtt 服务,并且该应用程序在 Android 12 设备上不断崩溃,并显示以下崩溃日志
java.lang.IllegalArgumentException: app id: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
at android.app.PendingIntent.checkFlags(PendingIntent.java:382)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:673)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:660)
at org.eclipse.paho.android.service.AlarmPingSender.start(AlarmPingSender.java:76)
at org.eclipse.paho.client.mqttv3.internal.ClientState.connected(ClientState.java:1214)
at org.eclipse.paho.client.mqttv3.internal.ClientState.notifyReceivedAck(ClientState.java:1050)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:151)
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的库:
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
Run Code Online (Sandbox Code Playgroud) 我已经找到了类似的答案,但对我的问题没有任何作用,因为我得到了这个异常-
面向 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一。强烈考虑使用 FLAG_IMMUTABLE,仅当某些功能依赖于可变的 PendingIntent 时才使用 FLAG_MUTABLE,例如,如果需要与内联回复或气泡一起使用。
但这包含一个条件 -我没有在我的应用程序中使用任何 PendingIntent。所以很明显我无法改变使用它的格式。我有这些 firebase 依赖项-
implementation 'androidx.work:work-runtime-ktx:2.7.1'
implementation 'com.google.firebase:firebase-core:21.0.0'
implementation 'com.google.firebase:firebase-messaging:23.0.0'
implementation 'com.google.firebase:firebase-iid:21.1.0' // add this
Run Code Online (Sandbox Code Playgroud)
有谁可以帮忙吗!!对于Android 12,我应该做什么简单的API调用在演示者层中使用改造和可观察和观察者
我能描述问题的最好方法是这样的:
BroadcastReceiver).我该如何防止最后一步?我想要的后退按钮是回到原来的位置,这是主屏幕(包含所有小部件和应用程序图标的桌面).我的应用程序的主要活动应该是在后台运行,为什么用后退按钮调用它?
如果相关,我创建通知的代码如下:
public void createNotification(int notifyId, int iconId, String contentTitle, String contentText) {
Intent intent = new Intent(mContext, NewNoteActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(AgendaNotesAdapter.KEY_ROW_ID, (long)notifyId);
PendingIntent contentIntent = PendingIntent.getActivity(mContext, notifyId, intent, 0);
Notification notification = new Notification(iconId, contentTitle, 0);
notification.setLatestEventInfo(mContext, contentTitle, contentText, contentIntent);
mNotificationManager.notify(notifyId, notification);
Run Code Online (Sandbox Code Playgroud)
我试图添加几个标志组合,intent但他们都没有解决我的问题...建议?
notifications android back-button android-intent android-pendingintent
我试图在一段时间间隔后显示不同的通知但发生的事情是它更新当前PendingIntent的新的一个因此我得到只有一个通知,即使我触发4 - 5个待处理的意图请求
在按钮上单击我执行以下操作
try{
adapter.OpenDB();
int id = adapter.getMaxId("reminder")+1;
adapter.CloseDB();
Intent intent = new Intent(MilestonesActivity.this, AlarmReceiver.class);
intent.putExtra("message", ""+editMsg.getText()+" "+editDate.getText());
intent.putExtra("id", id);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MilestonesActivity.this, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP,
reminddate.getTimeInMillis(), pendingIntent);
adapter.CloseDB();
}catch (Exception e) {
// TODO: handle exception
}
Run Code Online (Sandbox Code Playgroud)
AlarmReceiver.java
@Override
public void onReceive(Context context, Intent intent) {
Intent i =new Intent(context, NotificationService.class);
try{
int id = intent.getExtras().getInt("id");
i.putExtra("id", id);
CharSequence message = intent.getExtras().getString("message");
i.putExtra("message", message);
}catch (Exception e) {
// TODO: handle exception
} …Run Code Online (Sandbox Code Playgroud) 这是我用来为我的小部件设置警报的代码:
private static void setAlarm(Context context) {
Intent myIntent = new Intent(context, Widget.class);
myIntent.setAction(AUTO_UPDATE);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Service.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 8);
alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000,
pendingIntent);
}
Run Code Online (Sandbox Code Playgroud)
但问题是即使在睡眠模式下,onReceive()仍然会被意图触发.
虽然使用后setInexactRepeating代替setRepeating,调用之间的延迟时间也会上升到在睡眠模式下1分,但是这仍然是电池消耗.
我正在制作一个短信计划应用程序,它只需要用户的时间,短信和号码,并在给定时间发送短信.我在用PendingIntent.这是我的示例代码.
当用户创建计划时,它只是调用此方法.
private void SendMessages()
{
Intent intent = new Intent(this, SMSBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, Timemilli, pendingIntent);
}
Run Code Online (Sandbox Code Playgroud)
这是'SMSBroadcastReceiver.java'文件
public class SMSBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "SMS Sent !!!!.", Toast.LENGTH_LONG)
.show();
// //Sms Sending
try
{
SmsManager smsManager = SmsManager.getDefault();
for (int i = 0; i < SMSScheduleContactsActivity.SelectedContacts.length; i++)
{
smsManager.sendTextMessage(
SMSScheduleContactsActivity.SelectedContacts[i], null,
AddNewSmsSchedule.Message, null, null);
}
Log.d("testllllllllllllllll", "Message …Run Code Online (Sandbox Code Playgroud) 嘿,我收到了未决意图的警告。所以我根据这个问题和这个中等帖子包围了检查sdk的检查。我收到警告消息
缺少PendingIntent可变性标志
val pendingIntent: PendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)
} else {
PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
}
Run Code Online (Sandbox Code Playgroud)
如何删除此警告消息?
自今年年初以来,我们的应用程序一直遭受这种新型崩溃。
Firebase 显示它仅在搭载 Android 11 的小米上重复。它在应用程序的不同部分重复。而且它似乎与应用程序代码无关。所以我认为这与小米 Android 11 更新有关,其中代码损坏或新限制没有明确解释。
明显的想法是待定意图创建垃圾邮件,但我找不到任何证据表明该方法被频繁调用,只有几次。
有没有人想出一个 hack 来解决这个问题?抑制 throwable 并不是一个好的选择,因为该功能将不起作用。
代码片段:
val intent = Intent(context, SomeClass::class.java).apply {
this.action = action
this.putExtra(EXTRA_IDENTITY, identity)
}
PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
Fatal Exception: java.lang.SecurityException: Too many PendingIntent created for uid 10273, aborting Key{broadcastIntent pkg=<package> intent=act=<action name> cmp=<class> flags=0x0 u=0} requestCode=0
at android.os.Parcel.createExceptionOrNull(Parcel.java:2376)
at android.os.Parcel.createException(Parcel.java:2360)
at android.os.Parcel.readException(Parcel.java:2343)
at android.os.Parcel.readException(Parcel.java:2285)
at android.app.IActivityManager$Stub$Proxy.getIntentSenderWithFeature(IActivityManager.java:6898)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:578)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:561)
...
Run Code Online (Sandbox Code Playgroud) 我想通过待处理意图重新启动我的应用程序。下面的代码不起作用。
val intent = Intent(this, Activity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
}
val pendingIntentId = 1
val pendingIntent = PendingIntent.getActivity(this, pendingIntentId, intent, PendingIntent.FLAG_CANCEL_CURRENT)
val mgr = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val timeToStart = System.currentTimeMillis() + 1000L
mgr.set(AlarmManager.RTC, timeToStart, pendingIntent)
exitProcess(0)
Run Code Online (Sandbox Code Playgroud)
目标版本是 31,因此更新了未决意图,但PendingIntent.FLAG_MUTABLE仍然不起作用。我搜索了许多与此相关的链接,但没有运气。
2022 年 11 月,当目标版本为 31 且最低 sdk 版本为 29 时,上述待处理意图代码不会重新启动应用程序。
除了重新启动活动之外,还有为什么上述未决意图不起作用的任何线索或任何其他建议吗?我不想使用重新启动startActivity(intent)
android ×9
alarmmanager ×3
kotlin ×2
android-12 ×1
back-button ×1
firebase ×1
java ×1
paho ×1
rest ×1
smsmanager ×1
warnings ×1
xiaomi ×1