我如何更新数据库中的通话记录数据(java android)
Posted
技术标签:
【中文标题】我如何更新数据库中的通话记录数据(java android)【英文标题】:How do i update call log data in db upto date (java android) 【发布时间】:2021-01-12 19:42:07 【问题描述】:第 1 部分:当应用程序打开时,我的 MainActivity() 获取所有通话记录并保存在数据库中 第 2 部分:当应用程序关闭并且用户拨打多个电话并收到多个电话时,我如何在 db 中更新它们。
可能的解决方案: 解决方案1:每次打开应用时,删除所有通话记录,并再次将所有通话记录保存在应用中。
解决方案2:使用广播接收器,当通话结束时,在数据库中输入保存记录,即每次通话结束后都会被记录下来 当我使用解决方案 2 时它可以工作,但是当应用程序关闭时它不会保存任何数据。它仅在应用程序在后台运行时有效。
还有其他方法可以保存吗??有什么有效的方法吗?
这里是listing调用end的代码
@Override
public void onReceive(Context context, Intent intent)
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); //TelephonyManager object
//check if listener has already been instantiated
if(phoneStateListener == null)
phoneStateListener = new MyPhoneStateListener();
telephony.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras();
String phoneNr = bundle.getString("incoming_number");
Log.v("checker", "phoneNr: " + phoneNr);
mContext = context;
/* Custom PhoneStateListener */
private class MyPhoneStateListener extends PhoneStateListener
@Override
public void onCallStateChanged(int state, String incomingNumber)
if (incomingNumber != null && incomingNumber.length() > 0)
incoming_number = incomingNumber;
switch (state)
case TelephonyManager.CALL_STATE_RINGING:
Log.d("checker", "CALL_STATE_RINGING");
prev_state = state;
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("checker", "CALL_STATE_OFFHOOK");
prev_state = state;
break;
case TelephonyManager.CALL_STATE_IDLE:
List<CallModelTable> callLogDetails;
new Handler().postDelayed(PhoneStateBroadcastReceiver.this::saveLastCallLogInDb, 200);
Log.d("checker", "CALL_STATE_IDLE==>" + incoming_number);
if ((prev_state == TelephonyManager.CALL_STATE_OFFHOOK))
prev_state = state;
//Answered Call which is ended
Log.d("checker", "answered ended==>");
if ((prev_state == TelephonyManager.CALL_STATE_RINGING))
prev_state = state;
//Rejected or Missed call
Log.d("checker", "rejected or missed: ");
break;
【问题讨论】:
请贴出您用于监听通话结束事件的代码 @marmor 我已经编辑了问题并添加了代码。 【参考方案1】:有两种方法可以获取电话状态事件:监听android.intent.action.PHONE_STATE
广播和使用PhoneStateListener
。
第二种方法仅在应用程序处于活动状态时有效,并且在应用程序移至后台后不久监听器将被销毁。
对于第一种方法,您只需在清单中注册一个广播接收器,如下所示:
<receiver android:name="MyPhoneEventsBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
然后在BroadcastReceiver类中处理事件,不需要注册任何添加的监听器。
在此处查看教程:https://medium.com/@saishaddai/how-to-know-when-a-device-is-ringing-in-android-57e516d0ab42
【讨论】:
以上是关于我如何更新数据库中的通话记录数据(java android)的主要内容,如果未能解决你的问题,请参考以下文章