为什么ContentObserver被多次调用?

2024-02-26

我有以下ContentObserver接收和写入短信的实现,但被多次调用。

Code:

public class SMSObserverActivity extends Activity {
    protected MyContentObserver observer = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String url = "content://mms-sms/";
        Uri uri = Uri.parse(url);
        observer = new MyContentObserver(new Handler());
        getContentResolver().registerContentObserver(uri, true, observer);
    }

    @Override
    protected void onDestroy(){
        super.onDestroy();

        getContentResolver().unregisterContentObserver(observer);
    }

    class MyContentObserver extends ContentObserver {
        ContentValues values = new ContentValues();
        Handler handler;

        public MyContentObserver(Handler handler){
            super(handler);
            this.handler = handler;
        }

        @Override
        public boolean deliverSelfNotifications(){
            return false;
        }


        @Override
        public void onChange(boolean arg0){
            super.onChange(arg0);

            Log.v("SMS", "Notification on SMS observer");
            values.put("status", 5);
            Message msg = new Message();
            msg.obj = "xxxxxxxxxx";
            int threadId = 0;
            handler.sendMessage(msg);

            Uri uriSMSURI = Uri.parse("content://sms/");
            Cursor cur =
                    getContentResolver().query(uriSMSURI, null, null, null,
                            null);
            cur.moveToNext();
            Log.e("sms", cur.getString(4)+" "+cur.getString(11));
        }
    }
}

显现:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.READ_SMS"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SMSObserverActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

为什么会被多次调用?

EDIT:
有人认为问题是由缺失引起的unregisterContentObserver,但这没有什么区别。


发生这种情况是因为您正在为整个 SMS 数据库注册内容观察器。因此,每次更新数据库中的表条目时,您的内容观察者都会收到通知。

在这种情况下,当发送消息时,例如大约 7 个表条目会更新,因此您的内容观察者会收到 7 次通知。

由于我只对是否发送消息感兴趣,因此我已更改为仅观察排队的消息,这意味着我的观察者总是会收到三次通知,因此我已经实现了代码来防止这种情况。

可能还存在一些其他问题,例如多收件人或多部分消息,但到目前为止,基础知识是有效的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么ContentObserver被多次调用? 的相关文章

  • 如何从android ble扫描结果中获取CRC?

    我每次都从 ble 设备收到 62 字节的扫描结果 使用下面的回调代码获取扫描结果 我可以获取 RSSI 但无法获取 CRC 或者 获取一帧的CRC的逻辑是什么 来自 ble 设备的数据格式 如数据包标头 广告数据 CRC RSSI 如何从
  • Xamarin 分步向导 Android 视图

    我想在 Xamarin c 中构建一个 android 活动 用于逐步注册和 或信息 我怎样才能做这样的事情 谁能给我一个代码示例或其他东西 谢谢 基本上你需要使用一个名为 a 的元素ViewPager 并且每个页面都会不同Fragment
  • 如何制作像 Google+ 应用程序中那样的气泡? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有谁知道如何使用 Google An
  • 在工具栏下显示内容

    您好 我试图简单地将我的内容放在工具栏下方 但是当我运行我的应用程序时 某些内容本应位于工具栏下方 却隐藏在工具栏后面 我已经阅读了有关使用框架布局来尝试将其分离的内容 但我有点卡住了 我目前正在使用该软件提供的基本 android stu
  • Android ToggleButton 始终检查

    如果切换按钮处于选中或取消选中状态 我想存储在 SharedPreferences 中 toggle setOnCheckedChangeListener new OnCheckedChangeListener public void on
  • Android:如何暂停和恢复可运行线程?

    我正在使用 postDelayed 可运行线程 当我按下按钮时 我需要暂停并恢复该线程 请任何人帮助我 这是我的主题 protected void animation music6 music4 postDelayed new Runnab
  • 音频流的最佳实践

    我正在编写一个应用程序来播放远程服务器的音频 我尝试了多种方法来实现流音频 但它们对我来说都不够好 这就是我尝试过的 幼稚地使用 MediaPlayer 就像是 MediaPlayer player new MediaPlayer play
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • 如何在不使用 Firebase 控制台的情况下发送 Firebase 云消息通知?

    我从新的 Google 通知服务开始 Firebase Cloud Messaging 感谢这段代码https github com firebase quickstart android tree master messaging htt
  • relativelayout导致动画不起作用?

    我有一个活动 其布局仅包含一个 VideoView 这是 XML
  • 如何在Android中的DataBinding的ViewModel类中获取R.string

    我目前正在使用databinding对于我的 Android 应用程序项目 我想设置error留言在我的CustomTextView from R string txtOldPassWordError并从另一个名为的类中进行设置ViewMo
  • java.lang.IllegalAccessError:预验证类中的类引用在运行测试项目时解析为意外实现?

    在实施项目工作正常之后 我使用第三方库 zxing 实施了项目 然后在我编写了一个测试项目对我的项目进行单元测试之后 运行测试项目后 主项目 类及其方法没有给出任何信息错误 但如果在主项目的该方法中使用任何 zxing 框架类 则会在运行时
  • Android 操作项上的通知徽章

    我想在操作栏中放置的购物车图像上添加一个通知徽章 并以编程方式操作它 有帮助吗 您可以显示自定义MenuItem on ActionBar通过创建一个custom layout for MenuItem 要设置自定义布局 您必须使用菜单项属
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • 以 HTML 格式发送电子邮件

    我想发送 HTML 格式的电子邮件 如下图所示 我怎样才能做到这一点 请帮我 提前致谢 String body new String table tr td br header td tr br br Get b Best Score b
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • Android 中 Activity 之间的 3D 动画

    How to create animation between two Activity look like As Screen shot in android 搜索jazzyviewpager 这是link https github co
  • Android AppWidgetManager 方法 updateAppWidget 无法设置意图、加载数据。而且它是随机发生的

    我的小部件由 2 个按钮和一个显示数据的列表视图组成 大多数时候 当调用小部件提供程序的 onUpdate 方法时 一切都会正常加载 每个人都很高兴 但是我注意到有时在调用更新方法后 小部件完全无法加载其数据 列表视图为空 所有按钮均无响应
  • Android:透明活动问题

    最近 在我们的一款生产应用程序上 透明活动已停止工作 我的意思是它变成了黑色背景而不是透明背景 当我将活动的背景颜色设置为纯色 即红色 绿色等 时 它的应用不会出现问题 该问题可能是由于迁移到 AndroidX 引起的 但我没有这方面的证据
  • 我想测量 ListView 的高度 (getHight() = 0)

    我无法自己决定任务将是问 我想测量 ListView 的高度 无法捕捉渲染 ListView 的时刻 rssListView getHight 0 public class RSSactivity extends Activity publ

随机推荐

  • PHP 5.4:获取实例变量的完全限定类名

    我知道有静电classPHP 5 5 上的字段 但我必须坚持使用 PHP 5 4 是否可以从变量中获取完全限定的类名 Example namespace My Awesome Namespace class Foo 以及代码中的其他地方 p
  • 尽管我已在 Xcode 5 中添加,但应用程序图标未显示

    我已经添加了如下图所示的图标 但我仍然没有在我的设备或模拟器中看到该图标 这可能是 XCode 5 的错误 即添加的图标实际上并未包含在应用程序包中 但您可以通过转到 构建阶段 展开 复制包资源 然后按底部的 号手动添加来解决此问题图标文件
  • 嵌套哈希已定义?() [重复]

    这个问题在这里已经有答案了 确定是否最简洁的方法是什么 hash key1 key2 已定义 如果 hash or hash key1 为零 defined hash key1 key2 返回 True 如果 hash key1 存在 不判
  • eclipse中从方法定义跳转到方法调用【Java视角】

    日食中 我们有一个快捷键可以从调用方法的任何地方跳转到方法定义 即使用 F3 但是 如果我当前位于方法定义上并且我想要转到调用或使用该方法的位置 该怎么办 这有什么捷径吗 你可以试试Ctrl Shift G这相当于查找参考文献 or Ctr
  • 汇编代码不识别?和@数据

    这是我的第一个汇编程序 任何人都可以帮助使其成功运行 我看到下面的编译错误 为什么它不识别 and data 我正在尝试交换汇编中的两个变量 我正在执行以下命令 nasm f elf swap asm 但我收到这个错误 swap asm 6
  • WebLogic 10gR3 - 解析多部分/表单数据的 Content-Type 标头时出现 UnsupportedEncodingException

    我的应用程序在 WebLogic 10gR3 上通过 HTTP POST 接收多部分内容 每当客户指定charset属性beforeContent Type 标头上的其他属性 例如Content Type multipart form da
  • 乘以 keyup 上的输入值

    如何将一个输入的值乘以 2 并将其保存到另一个输入 那么当我输入 10 例如 时 第二个输入的值将是 20 Thanks 两个输入字段
  • 强制溢出到顶部而不是底部

    我希望我的内容溢出到 div 的顶部和左侧而不是右下角 目的是当展开 div 时 内容看起来像是从顶部而不是从底部进入 CSS 有什么办法可以做到这一点吗 很像你设置的方式vertical align对于文本 我想让 div 溢出到顶部而不
  • 将父容器的平移手势交给嵌套的 UICollectionView

    我正在尝试构建一个复杂的分割视图容器控制器 该控制器有利于两个可变高度容器 每个容器都有自己的嵌套视图控制器 父控制器上有一个全局平移手势 允许用户拖动视图容器中的任意位置 并在视图之间上下滑动 分隔线 它还具有一些智能位置阈值检测逻辑 可
  • 如何为 Cosmos 数据库中的每个文档设置字段?

    将每条记录的 PumperID 字段设置为默认值的 Cosmos 存储过程会是什么样子 我们需要这样做来修复一些数据 因此该过程将访问具有 PumperID 字段的每条记录 并非所有文档都有此字段 并将其设置为默认值 假设执行一次性数据维护
  • Biztalk Log4Net [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人在 Biztalk 中使用过 log4net 吗 我们目前正在考虑使用它 并试图了解它的优点 缺点 以及它是否能满足我们的需求 我已经将 L
  • Tomcat:限制 /just one/ webapp 对 localhost 的访问

    我正在运行 Tomcat 6 来为多个 Web 应用程序提供服务 其中大多数是面向公众的 但我想限制访问just onewebapp 仅允许来自本地主机的连接 我可以限制访问allwebapps 在 context xml 中使用 Valv
  • Java 7 独立应用程序中的依赖注入

    我想在大型 Java 7 独立应用程序中使用依赖注入 但我不太确定从哪里开始 我写了一个小测试应用程序 public class Main Inject MyInterface myInterface public static void
  • 如何验证PDF表单?

    我有一个用 Acrobat Professional 制作的可写 PDF 表单 我想验证数字条目是否在特定范围 a b 内 如果不是 我希望弹出一条警报 其中包含以下消息 请通过 XXX XXX XXXX 联系 Larry 以处理您的表单
  • Redis 连接因关闭事件而消失

    在我们的redis配置中 我们设置了超时 7秒 In 节点redis https github com mranney node redis我们将 Redis 连接就绪和结束事件处理为 client on ready function lo
  • CLion 无法从剪贴板粘贴正确的代码片段

    虽然在我的编程 职业生涯 中大部分时间都使用 Java 和 PHP 但我现在正在尝试更深入地学习 C 为此 我使用 CLion 作为我的 IDE 主要是因为我非常熟悉 phpStorm 和 IntelliJ IDEA 除了学习一门新语言之外
  • 有效识别字符串的一部分是否在列表/字典键中? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我的列表中有很多 gt 100 000 小写字符串 其中子集可能如下所示 str list hello i am fro
  • 将Drawable转换为BLOB数据类型sqlite问题

    在这里 我附加了将图像存储在 Drawable 中并以 BLOB 数据类型传递到数据库的代码 我尝试了这个 它可以正确存储但不显示图像 Insall app db i1 new Insall app db i1 createDatabse
  • 匹配多列中的值的函数

    使用以下测试数据 df2 pd DataFrame np random randn 12 3 columns A B C thresh 3 df2 matches np where df2 A df2 B lt thresh 1 0 我创建
  • 为什么ContentObserver被多次调用?

    我有以下ContentObserver接收和写入短信的实现 但被多次调用 Code public class SMSObserverActivity extends Activity protected MyContentObserver