- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试开发一个短信应用程序。当我选择此应用程序作为默认短信应用程序并且当我收到带有此 SmsReceiver 代码的新短信时,会出现以下问题:
1) 每条新短信我都会收到 2 个 onReceive 调用
2) 退出 onReceive call 后短信从手机中删除。我只能通过此 onReceive 调用访问 SMS 消息,并且在该消息消失后。
这段代码有什么问题?我是否必须运行一些代码才能保留新短信?
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null && bundle.containsKey("pdus")) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdus[0]);
String senderNumber = sms.getOriginatingAddress();
String text = sms.getMessageBody();
long time = sms.getTimestampMillis();
sendNotification(context, senderNumber);
}
}
}
AndroidManifest.xml:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<activity
android:name=".SmsListActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</activity>
<receiver
android:name=".SmsReceiver"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter
android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.provider.Telephony.SMS_DELIVER" />
<action android:name="android.provider.Telephony.SMS_DELIVER_ACTION" />
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<receiver android:name=".MmsReceiver"
android:exported="true"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<service
android:name=".QuickResponseService"
android:enabled="true"
android:exported="true"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</service>
最佳答案
您收到 2 个 onReceive
调用,因为您同时注册了 SMS_DELIVER
( Activity 默认 SMS 应用程序监听器)和 SMS_RECEIVED
(被动短信监听器)操作。您的接收者不会检查您的 Intent 是什么。我建议删除 SMS_RECEIVED
操作。
由于您正在开发默认短信应用程序,因此您有责任在持久内存中保存(或丢弃)任何传入/传出消息。
建议的做法是使用 Telephony.Sms.Inbox
内容提供程序中的表来执行此操作(请注意,只有默认短信应用程序被授予写入该表的权限;具有短信权限的任何其他应用程序仅具有对该表的读取访问权限):
ContentValues values = new ContentValues();
values.put(Telephony.Sms.ADDRESS, senderNumber);
values.put(Telephony.BODY, text);
context.getContentResolver().insert(Telephony.Sms.Inbox.CONTENT_URI, values);
关于java - SmsReceiver onReceive 后短信消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466107/
是否可以让通知启动广播接收器? 我试过这段代码,但它不起作用。 通知已创建,但当我点击它时没有任何反应。 注意:当我将 notificationIntent 更改为从 MyBroadcastRecei
下面是我的 Java 代码和 XML 代码。有人可以告诉我为什么我的 onReceieve 方法永远不会被调用吗? Java: public class PopUPSMS extends Activi
onReceive 永远不会接到电话!我已经完成了这个工作,并且做了一些更改,现在我已经为此工作了 5 个小时,并且不知道当我向它发送短信时我的 onReceive 没有被调用! public voi
我正在尝试遵循这个例子: What is the correct way for sharing data among AppWidgetProvider and RemoteViewsService
我在 Activity 中创建了一个接收器,用于在连接互联网时自动调用网络服务。 代码如下 //Create receiver for while network will come auto cal
最近对Android开发很感兴趣, friend 给了我一本《Android应用开发傻瓜书》。在书中,有一个名为 Silent Toggle Mode 的示例应用程序。稍后它会教您为应用程序制作主屏幕
我在 mainfest.xml 中声明了我的 BroadcastReceiver 但从未调用过 onReceive() 方法。怎么了?我不想使用注册/注销方法。 Activity : Intent s
我有以下代码我想检测手机屏幕但是永远不会调用函数 onReceive谁能给我一个解决方案。请帮忙。如果有人有任何其他工作代码,请提供帮助。谢谢 package com.pack; import and
我创建了一个 broadcastreceiver 来 Hook 日历 EVENT_REMINDER 并获取有关事件的信息 public void onCreate(Bundle savedInstan
我读了这篇文章:Broadcast receiver onReceive() getting called multiple times 但我没有找到所需的答案。 我创建了一个小实用函数,它覆盖了 B
onReceive 方法中的线程在完成之前是否符合垃圾回收条件? @Override public void onReceive(final Context context, Intent inten
我正在使用此代码来检测屏幕何时被锁定并调用 toast,每次屏幕被锁定时它都会工作。但是,每当我离开应用程序时,它就会停止工作。它仅在应用程序打开时有效。 public class BatterySa
public class BroadcastTest extends Activity { BroadcastReceiver receiver; /** Called when the activi
我有一个从其他应用程序获取数据的服务。 当我得到日期时,我会向 broadCast 发送消息以刷新 UI。 多次调用onReceive方法,多次显示数据。 这是我的代码: DataService.ja
当我尝试接收的变量是@EnvironmentObject 的@Published 属性时,有什么方法可以防止在 View 最初加载时触发onReceive? 这是 View : struct Cont
我正在使用 Picker 来显示分段控件,并希望知道选择器值何时更改,以便我可以执行非 UI 操作。使用建议的 onReceive() 修饰符(如建议的 here )不起作用,因为每次渲染主体时都会调
我是 Android 初学者,遇到以下问题。我正在尝试从(不同的)应用程序 B 调用应用程序 A 注册的广播接收器。在应用程序 A 的广播接收器中,我实现了以下 onReceive() 方法,用于测试
我正在尝试开发一个短信应用程序。当我选择此应用程序作为默认短信应用程序并且当我收到带有此 SmsReceiver 代码的新短信时,会出现以下问题: 1) 每条新短信我都会收到 2 个 onReceiv
我正在设置一个内部BroadcastReceiver来获取 Activity 转换更新,例如步行、in_Vehicle。但 onReceive 方法永远不会被调用。 onCreate @Overri
我正在编写一个 Android 应用程序,它有一个受权限保护的广播接收器。广播接收器在接收来自经过身份验证的应用程序的请求时扫描硬编码 IP 地址的端口 80。它返回套接字连接尝试的结果。在我的代码中
我是一名优秀的程序员,十分优秀!