- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我制作了一个示例应用程序和 PhoneStateListener
TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); //TelephonyManager object
telephony.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
Log.i("brian", "call state = " + state + " incoming number " + incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
}
}
}, PhoneStateListener.LISTEN_CALL_STATE); //Register our listener with TelephonyManager
Log.i("brian", "READ_PHONE_STATE = " + ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_PHONE_STATE));
按预期工作,但当我将上述代码添加到我的更大的应用程序时,onCallStateChanged 仅在最初订阅时调用。没有电话状态变化通知我。在这两个项目中,底部日志行“READ_PHONE_STATE =”始终被授予,我的目标是 sdk 22,所以我认为没有运行时权限。在我较大的应用程序中,我将代码粘贴到主要 Activity 和长期服务中,都没有获得状态更改事件。当我在 android < 7.0 上运行我的代码时,它们都可以工作,我不知道为什么。在警告或错误日志中看不到任何实质内容。
最佳答案
正如 Vairavan 在 this 中提到的那样回答,PhoneStateListener 的引用方式发生了内部变化:
Local reference to PhoneStateListener is kept track internally only by a weak reference. This makes it eligible for garbage collection upon function exit and once the listener is finalized, apps will not receive any further updates. Solution is to keep a reference to PhoneStateListener via class member variable.
关于android - Nougat 上未调用 TelephonyManager 的 PhoneStateListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40183905/
最近我在尝试使用 Android 设备获取相邻小区的信息。而且我试过很多品牌的安卓手机,比如三星,htc。结果只是Htc可以得到邻区信息。我使用的函数是 TelephonyMananger.getNe
我正在使用下面的代码结束通话。但现在在 Oreo 上,我收到一个错误,指出需要 MODIFY_PHONE_STATE 权限,因此此代码不再有效。 TelephonyManager telephon
TelephonyManager 中定义了许多网络类型: NETWORK_TYPE_GPRS NETWORK_TYPE_EDGE NETWORK_TYPE_UMTS NETWORK_TYPE_CDMA
我在开发应用程序时需要电话号码。因此,我使用了 TelephonyManager,如下所示: TelephonyManager tmgr =(TelephonyManager)getApplicati
我似乎无法在 android 中声明 TelephonyManager,这就是我想要做的: TelephonyManager tele = Context.getSystemService(Conte
我正在生成一个用于混淆信息的 key 。 该 key 必须在设备之间更改,因此对于我使用的一代: Secure.getString(getContentResolver(), Secure.ANDRO
我对 TelephonyManager 有疑问。 DeviceId 为空/空白。这是我的代码。我哪里错了? 这是我的java代码 RegistryActivity.java package andro
我有一个类,一个电话状态的监听器。在此,当调用断开此线路时, case TelephonyManager.CALL_STATE_IDLE: Log.e(TAG, "CALL_STATE_IDLE");
我处于一种情况,我必须通过 GSMCellLocation 获取位置,即经度和纬度,因此我正在尝试以下方式: ... TelephonyManager tm = (TelephonyManag
我在振铃状态时得到一个电话号码,但有时在摘机状态时将其设置为空。我无法捕捉到它变成空的那一刻。 因此,当有电话打来(来电)时,它会进入振铃状态,并且号码会设置为 callno 变量。之后,当我接听电话
我希望我的应用在 networkType 更改时自动通知用户(例如从 EDGE 到 3G 或 3G 到 1XRTT 等)。使用 getNetworkType() 方法,我必须不断检查 networkT
如果数据连接不可用(因此 Geocoder 不起作用),我想找出用户当前所在的国家/地区。我想我可以通过使用 TelephonyManager.getNetworkCountryIso 在手机(不是平
我添加了这是我的 list 文件 - 那我的服务类是这样的—— public class Service
我刚刚接触 Android 开发,并决定我在这个新领域的第一个征服将是掌握手机对来电的 react 。 后来我用谷歌搜索了一下 http://www.compiletimeerror.com/2013
根据 Android 文档,它表示 getCellLocation API 调用将在未来弃用。有谁知道为什么它会被弃用?如果这是弃用,那么是否有其他替代方法来获取小区位置信息? Reference 最
我想知道如何从我的 android 应用程序中获取设备/用户区号我知道有一个名为 TelephonyManager 的库,但我找不到国家代码功能 为了让自己清楚:我有一个 Activity 要求用户输
我想获取安卓设备的电话号码。我使用此代码: TelephonyManager tm = (TelephonyManager)this.getApplicationContext().getSystem
以下更改发布 here ,getNetworkType 方法已从 Android R 及以后版本弃用。 在 R 编译的应用程序中尝试使用此方法时,会导致抛出以下异常: java.lang.Securi
我制作了一个音乐播放器应用程序,并在电话被调用时暂停歌曲,我使用此代码。 但这需要 READ_PHONE_STATE 权限,这可能会吓跑一些用户,所以我想知道是否可以通过另一种方式实现同样的事情而
我正在实现一个支付应用程序。因此,为了进行联系验证,我必须找到联系电话。我还从 sim 发送短信以在服务器上进行交叉验证。我试过了 > TelephonyManager tm = > (Telepho
我是一名优秀的程序员,十分优秀!