Java 三星';s手机通话记录详细信息按相反顺序保存到游标

Java 三星';s手机通话记录详细信息按相反顺序保存到游标,java,android,cursor,samsung-mobile,calllog,Java,Android,Cursor,Samsung Mobile,Calllog,我正在编写一个应用程序,用于从Android手机获取最新的通话记录详细信息。在华为手机上运行我的应用程序时,我成功接收最后一次通话的详细信息。但如果我在三星手机上运行我的应用程序,我会收到最老的电话,这意味着列表中的最后一个电话。我正在使用下面的方法获取上次通话记录的详细信息?我应该如何从三星手机获取最新的上次通话详细信息 private void getCallLogs() { ContentResolver cr = ctx.getContentResolver();

我正在编写一个应用程序,用于从Android手机获取最新的通话记录详细信息。在华为手机上运行我的应用程序时,我成功接收最后一次通话的详细信息。但如果我在三星手机上运行我的应用程序,我会收到最老的电话,这意味着列表中的最后一个电话。我正在使用下面的方法获取上次通话记录的详细信息?我应该如何从三星手机获取最新的上次通话详细信息

  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();
        }