多次调用电话状态侦听器

2023-12-20

您好,我想将传入号码记录到数据库中。我正在使用广播接收器来监听电话并使用电话状态监听器。 这是我的代码

ThePhoneStateListener.java

package com.example.netlogger.Receiver;
import android.content.Context;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;

public class ThePhoneStateListener extends PhoneStateListener {
    Context context;
    public ThePhoneStateListener(Context context) {
        this.context = context;
    }
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);
        if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
            Log.d("TAGG", "Insert: " + incomingNumber);
        }

    }
}

CallActionReceiver.java

package com.example.netlogger.Receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

public class CallActionsReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        TelephonyManager manager = (TelephonyManager) arg0
                .getSystemService(arg0.TELEPHONY_SERVICE);
        manager.listen(new ThePhoneStateListener(arg0),
                android.telephony.PhoneStateListener.LISTEN_CALL_STATE);
    }
}

清单.xml

<receiver android:name="com.example.netlogger.Receiver.CallActionsReceiver">
    <intent-filter android:priority="2147483647">
        <action android:name="android.intent.action.PHONE_STATE"/>
    </intent-filter>
    <intent-filter android:priority="2147483647">
        <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
    </intent-filter>
</receiver>

in ThePhoneStateListeneronCallStateChanged() 为什么会被多次调用。我只想将传入号码插入数据库一次。


不知怎么的,我解决了。问题是,每当我的广播接收器的 onReceive() 被调用时,每次我试图监听一个新的 PhoneStateListener 时。您只需要执行一次。就像下面一样

package com.example.netlogger.Receiver;

import java.util.Date;

import com.example.netlogger.util.LocalDatabase;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

public class CallActionsReceiver extends BroadcastReceiver {
    static ThePhoneStateListener phoneStateListener;



    @Override
    public void onReceive(Context arg0, Intent arg1) {
        TelephonyManager manager = (TelephonyManager) arg0
                .getSystemService(arg0.TELEPHONY_SERVICE);      
        if (phoneStateListener == null) {
            phoneStateListener = new ThePhoneStateListener(arg0);
            manager.listen(phoneStateListener,
                    android.telephony.PhoneStateListener.LISTEN_CALL_STATE);
        }


    }

}

问题解决了。干杯

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

多次调用电话状态侦听器 的相关文章

随机推荐

  • 在 cp1252 上强制使用 UTF-8 (Python3)

    我编写了一些使用 Biopython Entrez 包装器的代码 代码在我以前的 Win10 笔记本电脑 Python 3 5 1 上运行良好 但我刚刚将代码移植到安装了相同版本的每个包和 Python 的新 Win10 笔记本电脑上 现在
  • 关联/随机访问容器

    我正在寻找一种数据结构来保存唯一元素的无序集合 它将支持以下操作 集合中任意位置的元素插入 删除 查询元素是否存在 访问随机元素 天真地 1 和 2 建议使用关联容器 例如unordered set 但 3 的元素数量是线性的 使用随机访问
  • 如何在 Google Maps API 中使信息窗口可编辑?

    我想在单击信息窗口时使其可编辑 这是我的代码
  • 突出显示CSS网格[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有 CSS 网格 div style display grid class scEnabledChrome div when I
  • 如何指定列表选择方法?

    我有一个计算列表的方法 在算法中的某些点 需要从列表中选择单个元素 选择哪个元素并不重要 但我想将其留给用户来决定 现在 我添加了一个扩展方法IList
  • 使用 jQuery 检测 iPhone 滑动

    我只是在寻找一个能够检测手指在触摸设备上滑动的监听器 例如 if swipe direction left function 通过 jQueryMobile 您可以使用多个事件 例如swipe 甚至swipeleft swiperight
  • 如何将可变数量的参数从一个函数传递到另一个函数?

    有没有办法直接将可变数量的参数从一个函数传递到另一个函数 我想实现一个最小的解决方案 如下所示 int func1 string param1 int status STATUS 1 func2 status param1 我知道我可以使用
  • 如何从 pyuic .py 文件重建 .ui 文件

    不久前我用 PyQt 做了一个项目 我创建了一些 ui 文件并使用 pyuic4 生成了相应的 py 文件 我想再次开始工作 但我丢失了 ui 文件 我格式化了我的电脑并进行了备份 但 ui 文件驻留在 Qt 设计器文件夹中并丢失了 有什么
  • 如何在 VS Code 中获取当前主题的颜色?

    我正在尝试更改 VS Code 实例中的某些颜色 我知道如何改变颜色 workbench colorCustomizations 设置 道具名称 https code visualstudio com docs getstarted the
  • 检测国际键盘的出现和消失

    当键盘出现时 有没有办法检测它是国际键盘 普通键盘顶部有一条额外的丝带以显示国际字符 并获取它的框架大小 我需要使用该信息向上移动 如果需要 键盘上方的视图 看看这篇文章 http mobile tutsplus com tutorials
  • 如何检测 iPhone 上是否连接了硬件键盘? [复制]

    这个问题在这里已经有答案了 可能的重复 iPad 检测是否存在外部键盘 https stackoverflow com questions 2893267 ipad detect if external keyboard is presen
  • 如何使用 ASP MVC Complete Wrapper 设置 Kendo UI Grid 的高度

    我正在使用 KendoUI Grid 及其 ASP MVC Complete Wrapper 库 但在剃刀代码中设置网格高度时遇到问题 我尝试设置 HTMLAttribute 但似乎不起作用 Html Kendo Grid
  • VBA上次更改方法

    我正在寻找一个在评论框中打印的功能 谁是更改该单元格数据的用户 我现在所拥有的是这样的 Private Sub Worksheet Change ByVal Target As Range If Range A Target Row Val
  • 比较两个列表并使用 powershell 查找列表一中的名称而不是列表二中的名称

    只是想知道你是否可以帮助我 我正在尝试比较两个列表 txt文件 并找到列表A中而不是列表B中的字符串并将其输出到另一个txt文件 任何人都知道如何使用电源外壳 这是我到目前为止所拥有的 Compare Object ReferenceObj
  • 通过 NSDate 对 UITableView(核心数据)进行排序

    在这个例子中 假设我有一个按钮 每次按下它都会添加一个NSDate到核心数据实体中 我也有一个TableView显示该实体的所有成员 我该如何排序TableView by NSDate 出来的格式如下 2011 08 09 21 52 13
  • 隐藏的 Cytoscape 图表稍后无法显示

    我有 2 个 Bootstrap 列 每个宽度为 12 中的 6 左边的一列有一些按钮 右边的一列包含一个用 5 个节点初始化的 Cytoscape 图 最初 当页面加载完成时 Cytoscape 图形被设置为隐藏 cyto div hid
  • 将列表文件取消列出到多个数据帧[重复]

    这个问题在这里已经有答案了 我创建了一个包含 72 个元素的 R 列表 如何将此文件取消列出到 72 个单个数据帧以及每个元素的名称 这是一个例子 L lt list data frame matrix 1 4 2 2 data frame
  • 使用 OAUTH 2.0 验证并从 Facebook cookie 获取数据

    我有一个用 GWT 制作的网页 在那里 我使用所有登录 facebook 的东西和一个受操纵的 gwtfb 库 一切正常 迁移到 oauth 2 0 后 发送到服务器的 cookie 已更改为加密的 cookie 我想要一个java示例代码
  • 如何将字符串转换为小数?

    我有两个字符串 0 31 和 0 0076 它们需要存储在MySQL 的小数 10 2 列中 我如何在 ruby 中进行此转换 但不能直接在 mysql 中进行此转换 尝试使用CAST SELECT CAST colName AS DECI
  • 多次调用电话状态侦听器

    您好 我想将传入号码记录到数据库中 我正在使用广播接收器来监听电话并使用电话状态监听器 这是我的代码 ThePhoneStateListener java package com example netlogger Receiver imp