【发布时间】: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 我已经编辑了问题并添加了代码。
标签: java android android-contacts greendao