Java 三星';s手机通话记录详细信息按相反顺序保存到游标
我正在编写一个应用程序,用于从Android手机获取最新的通话记录详细信息。在华为手机上运行我的应用程序时,我成功接收最后一次通话的详细信息。但如果我在三星手机上运行我的应用程序,我会收到最老的电话,这意味着列表中的最后一个电话。我正在使用下面的方法获取上次通话记录的详细信息?我应该如何从三星手机获取最新的上次通话详细信息Java 三星';s手机通话记录详细信息按相反顺序保存到游标,java,android,cursor,samsung-mobile,calllog,Java,Android,Cursor,Samsung Mobile,Calllog,我正在编写一个应用程序,用于从Android手机获取最新的通话记录详细信息。在华为手机上运行我的应用程序时,我成功接收最后一次通话的详细信息。但如果我在三星手机上运行我的应用程序,我会收到最老的电话,这意味着列表中的最后一个电话。我正在使用下面的方法获取上次通话记录的详细信息?我应该如何从三星手机获取最新的上次通话详细信息 private void getCallLogs() { ContentResolver cr = ctx.getContentResolver();
private void getCallLogs() {
ContentResolver cr = ctx.getContentResolver();
if (ActivityCompat.checkSelfPermission(ctx, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Cursor c = cr.query(CallLog.Calls.CONTENT_URI, null, null, null, null);
int totalCall = 1;
if (c != null) {
totalCall = 1; // intenger call log limit
if (c.moveToLast()) { //starts pulling logs from last - you can use moveToFirst() for first logs
for (int j = 0; j < totalCall; j++) {
String call_id = c.getString(c.getColumnIndexOrThrow(CallLog.Calls._ID));
String phNumber = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
String callDate = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.DATE));
String callDuration = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.DURATION));
Date dateFormat= new Date(Long.valueOf(callDate));
String callDayTimes = String.valueOf(dateFormat);
String callerName = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.CACHED_NAME));
String direction = null;
switch (Integer.parseInt(c.getString(c.getColumnIndexOrThrow(CallLog.Calls.TYPE)))) {
case CallLog.Calls.OUTGOING_TYPE:
direction = "OUTGOING";
break;
case CallLog.Calls.INCOMING_TYPE:
direction = "INCOMING";
break;
case CallLog.Calls.MISSED_TYPE:
direction = "MISSED";
break;
case CallLog.Calls.VOICEMAIL_TYPE:
direction = "VOICEMAIL_TYPE";
break;
case CallLog.Calls.REJECTED_TYPE:
direction = "REJECTED_TYPE";
break;
case CallLog.Calls.BLOCKED_TYPE:
direction = "BLOCKED_TYPE";
break;
case CallLog.Calls.ANSWERED_EXTERNALLY_TYPE:
direction = "ANS EXT TYPE";
break;
default:
break;
}
c.moveToPrevious(); // if you used moveToFirst() for first logs, you should this line to moveToNext
Toast.makeText(ctx, phNumber + callDuration + callDayTimes + direction +callerName , Toast.LENGTH_SHORT).show(); // you can use strings in this line
}
}
c.close();
}
}
private void getCallLogs(){
ContentResolver cr=ctx.getContentResolver();
if(ActivityCompat.checkSelfPermission(ctx,Manifest.permission.READ\u CALL\u LOG)!=PackageManager.permission\u已授予){
考虑到呼叫
//ActivityCompat#请求权限
//在此处请求缺少的权限,然后覆盖
//public void onRequestPermissionsResult(int-requestCode,字符串[]权限,
//int[]格兰特结果)
//处理用户授予权限的情况。请参阅文档
//对于ActivityCompat,请请求权限以获取更多详细信息。
返回;
}
游标c=cr.query(CallLog.Calls.CONTENT_URI,null,null,null,null);
int totalCall=1;
如果(c!=null){
totalCall=1;//管理员呼叫日志限制
如果(c.moveToLast()){//开始从最后一个日志中提取日志,则可以对第一个日志使用moveToFirst()
对于(int j=0;j
三星手机通话记录历史记录保存到Cursor与华为等其他移动设备不同。因此,我们必须找到设备名称,并希望运行到单独的方法
范例
如果它的三星设备
我们必须使用c.moveToFirst()
三星手机通话记录历史记录保存到Cursor与华为等其他移动设备不同。因此,我们必须找到设备名称,并希望运行到单独的方法 范例 如果它的三星设备 我们必须使用
c.moveToFirst()
String deviceMan = Build.MANUFACTURER;
String deviceName=deviceMan.toLowerCase();
if(deviceName.equals("samsung"))
{
getCallLogs("samsung");
}
else
{
getCallLogs("other");
}
if (c != null) {
if(devicename.equals("samsung"))
{
if (c.moveToFirst()) { //starts pulling logs from last - you can use moveToFirst() for first logs
getCallDetails(c);
}
}else
{
if (c.moveToLast()) { //starts pulling logs from last - you can use moveToFirst() for first logs
getCallDetails(c);
}
}
c.close();
}