如何解决如何更新db中最新的通话记录数据java android
第1部分:当应用打开时,我的MainActivity()获取所有呼叫日志并保存在数据库中 第2部分:当应用程序关闭且用户拨打多个电话并收到多个电话时,如何在db中更新它们。
可能的解决方案: 解决方案1:每次应用打开时,删除所有通话记录,然后将所有通话记录再次保存在应用中。
解决方案2:使用广播接收器,当通话结束时,在db中输入保存记录,即每次通话结束后都会进行记录 当我使用解决方案2时,它可以工作,但是当应用程序关闭时,它不保存任何数据。它仅在应用程序在后台运行时有效。
还有其他方法可以保存它们吗?任何有效的方法吗?
这是侦听呼叫结束的代码
@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;
}
}
}
解决方法
有两种获取电话状态事件的方法:收听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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。