Kev*_*uan 4 android phone-state-listener
Run Code Online (Sandbox Code Playgroud)@Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_RINGING: if (incomingNumber == null || "".equals(incomingNumber)) { return; } break; } }
我在 Android sdk27 下面遇到了同样的问题,我在 PhoneService 中启动 PhoneStateListener ,
Run Code Online (Sandbox Code Playgroud)public void startPhoneStateListener() { mTelManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); mTelManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); }
但我只在 RootReceiver 中启动服务,而不是在 MainActivity 中启动服务,当我在 MainActivity 中启动 PhoneService 时,我修复了它。
<receiver android:name=".receiver.RootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
但这只能在Android sdk 27以下工作,我不知道Android 9.0,顺便说一句,我已经写了权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Run Code Online (Sandbox Code Playgroud)
与传入和传出呼叫关联的电话号码在电话状态广播中可见,例如传入和传出呼叫的电话号码,并且可以从
PhoneStateListener班级访问。但是,未经许可,广播和通过中READ_CALL_LOG提供的电话号码字段为空。PHONE_STATE_CHANGEDPhoneStateListener
READ_CALL_LOG如果您需要传入电话号码,则必须请求许可。
请注意,根据同一页面:
要读取 中的数字
onCallStateChanged(),您READ_CALL_LOG只需获得许可。你不需要READ_PHONE_STATE许可。
| 归档时间: |
|
| 查看次数: |
4433 次 |
| 最近记录: |