Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中获取上一次通话持续时间而不是上一次通话持续时间?_Android - Fatal编程技术网

在android中获取上一次通话持续时间而不是上一次通话持续时间?

在android中获取上一次通话持续时间而不是上一次通话持续时间?,android,Android,我正在创建一个应用程序,它根据一些规则通过编程断开调用!。我遇到的问题是,我正在尝试在断开电话后获取上次通话的通话持续时间! 但问题是我得到的持续时间是以前的通话持续时间,而不是断开的通话 我的代码是: public void disconnect(){ disconnectPhoneItelephony(context); calldisconnected(); WhitelistDAO whiteListDao1 = new WhitelistDAO(context)

我正在创建一个应用程序,它根据一些规则通过编程断开调用!。我遇到的问题是,我正在尝试在断开电话后获取上次通话的通话持续时间! 但问题是我得到的持续时间是以前的通话持续时间,而不是断开的通话

我的代码是:

public void disconnect(){
    disconnectPhoneItelephony(context);
    calldisconnected();
    WhitelistDAO whiteListDao1 = new WhitelistDAO(context);
    String dura = LastCall();
    if (dura.equals("0")) {
        int dbTime = Integer.parseInt(whiteListDao1.getLimit(finalNumber));
        whiteListDao1.updateLimit(String.valueOf(dbTime), finalNumber);
    } else {
        whiteListDao1.updateLimit("0", finalNumber);
    }
}


public String LastCall() {
        String callDura = "0";
        StringBuffer sb = new StringBuffer();
        Uri contacts = CallLog.Calls.CONTENT_URI;
        if (ActivityCompat.checkSelfPermission(this, 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 null;
        }
        Cursor managedCursor = getApplicationContext().getContentResolver().query(
                contacts, null, null, null, android.provider.CallLog.Calls.DATE+ " DESC limit 1;");
        int number = managedCursor.getColumnIndex( CallLog.Calls.NUMBER );
        int duration1 = managedCursor.getColumnIndex( CallLog.Calls.DURATION);
        int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
        if( managedCursor.moveToFirst() == true ) {
            String phNumber = managedCursor.getString( number );
            callDura = managedCursor.getString( duration1 );
            String callDate = managedCursor.getString(date);
            String callDayTime = new Date(Long.valueOf(callDate)).toString();
            String dir = null;
            Log.e("DUR","\nPhone Number:--- "+phNumber +" \nCall duration in sec :--- "+callDura +" \nCall Date in sec :--- "+callDayTime );
        }
        managedCursor.close();
        return callDura;
    }

我认为这应该解决它! 在处理程序中以1秒的延迟运行函数!然后您将获得正确的上次通话持续时间,而不是上次通话持续时间。我认为android无法在发现后立即获得最后一次通话的详细信息!在数据库中插入可能需要第二次延迟

比如:


我的荣幸!快乐编码
 private Handler handler = new Handler();
    public void disconnect(){
        disconnectPhoneItelephony(context);
        calldisconnected();
        handler.removeCallbacksAndMessages(null);
        handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            WhitelistDAO whiteListDao1 = new WhitelistDAO(context);
            String dura = LastCall();
            if (dura.equals("0")) {
                int dbTime = Integer.parseInt(whiteListDao1.getLimit(finalNumber));
                whiteListDao1.updateLimit(String.valueOf(dbTime), finalNumber);
            } else {
                whiteListDao1.updateLimit("0", finalNumber);
            }
        }
    }, 1000);

    }