有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在编写一个应用程序,用于从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();
        }
    }

共 (1) 个答案

  1. # 1 楼答案

    三星手机通话记录保存到Cursor与华为等其他移动设备不同。所以我们必须找到设备名,并希望运行到单独的方法

    Example

                String deviceMan = Build.MANUFACTURER;
    
                String deviceName=deviceMan.toLowerCase();
    
                if(deviceName.equals("samsung"))
                {                
                    getCallLogs("samsung");
                }
                else
                {
                    getCallLogs("other");
                }
    

    如果它的三星设备

    我们必须使用c.moveToFirst()

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