如何将db中的呼叫日志数据更新到最新版本(java android)
第1部分:当应用程序打开my MainActivity()时,获取所有调用日志并保存在DB中 第2部分:当应用程序关闭,用户拨打多个电话并接听多个电话时,我如何在db中更新它们 可能的解决办法: 解决方案1:每次应用程序打开时,删除所有通话记录并再次将所有通话记录保存在应用程序中 解决方案2:使用广播接收器,当通话结束时,在db中输入save record,即每次通话结束后都会被记录下来 当我使用解决方案2时,它工作正常,但当应用程序关闭时,它不会保存任何数据。它只在应用程序在后台运行时起作用 还有其他办法拯救他们吗??有什么有效的方法吗 下面是listining调用end的代码如何将db中的呼叫日志数据更新到最新版本(java android),java,android,android-contacts,greendao,Java,Android,Android Contacts,Greendao,第1部分:当应用程序打开my MainActivity()时,获取所有调用日志并保存在DB中 第2部分:当应用程序关闭,用户拨打多个电话并接听多个电话时,我如何在db中更新它们 可能的解决办法: 解决方案1:每次应用程序打开时,删除所有通话记录并再次将所有通话记录保存在应用程序中 解决方案2:使用广播接收器,当通话结束时,在db中输入save record,即每次通话结束后都会被记录下来 当我使用解决方案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;
}
}
}
@覆盖
公共void onReceive(上下文、意图){
TelephonyManager telephony=(TelephonyManager)context.getSystemService(context.telephony_SERVICE);//TelephonyManager对象
//检查侦听器是否已实例化
if(phoneStateListener==null){
phoneStateListener=新的MyPhoneStateListener();
电话.listen(phoneStateListener,phoneStateListener.listen\u CALL\u STATE);
Bundle=intent.getExtras();
String phoneNr=bundle.getString(“传入的_编号”);
Log.v(“检查人”,“电话号码:”+phoneNr);
mContext=上下文;
}
}
/*自定义PhoneStateListener*/
私有类MyPhoneStateListener扩展了PhoneStateListener{
@凌驾
public void onCallStateChanged(int状态,字符串incomingNumber){
if(incomingNumber!=null&&incomingNumber.length()>0)
进货编号=进货编号;
开关(状态){
case TelephonyManager.CALL_STATE_响铃:
日志d(“检查”、“呼叫状态”铃声);
上一个状态=状态;
打破
case TelephonyManager.CALL_STATE_OFFHOOK:
日志d(“检查者”、“呼叫状态”下钩);
上一个状态=状态;
打破
case TelephonyManager.CALL_STATE_IDLE:
列出通话记录详情;
新处理程序().postDelayed(PhoneStateBroadcastReceiver.this::saveLastCallLogInDb,200);
Log.d(“检查器”,“呼叫状态\u空闲==>”+传入\u号码);
if((prev_state==TelephonyManager.CALL_state_OFFHOOK)){
上一个状态=状态;
//接完的电话
Log.d(“检查者”,“回答结束==>”;
}
if((上一个状态==电话管理器.呼叫状态){
上一个状态=状态;
//拒绝或未接来电
日志d(“检查人”、“被拒绝或遗漏”);
}
打破
}
}
}
获取手机状态事件有两种方法:监听android.intent.action.phone\u state广播和使用PhoneStateListener
第二种方法仅在应用程序处于活动状态时有效,并且在应用程序移动到后台后不久,侦听器将被销毁
对于第一种方法,您只需要在清单中注册广播接收器,如下所示:
<receiver android:name="MyPhoneEventsBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
获取手机状态事件有两种方法:监听android.intent.action.phone_state
广播和使用PhoneStateListener
第二种方法仅在应用程序处于活动状态时有效,并且在应用程序移动到后台后不久,侦听器将被销毁
对于第一种方法,您只需要在清单中注册广播接收器,如下所示:
<receiver android:name="MyPhoneEventsBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
请发布您用于监听呼叫结束的代码events@marmor我已经编辑了问题并添加了代码。请发布您用于收听呼叫结束的代码events@marmor我已经编辑了问题并添加了代码。