android 读取当天通话时长

添加权限

参考前一篇配置权限
<uses-permission android:name=“android.permission.READ_CONTACTS” >
<uses-permission android:name=“android.permission.READ_CALL_LOG” />
<uses-permission android:name=“android.permission.WRITE_CALL_LOG” />
<uses-permission android:name=“android.permission.READ_PHONE_STATE” />

之后创建MainActivity

内容

package com.xxxx.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CallLog;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class MainActivity extends AppCompatActivity {
private static final String TAG = “MainActivity”;

TextView todayText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    todayText=findViewById(R.id.text_today);
    readReord();

}


int readReord(){

    String[] projection = new String[]{
            CallLog.Calls.NUMBER,
            CallLog.Calls.TYPE,
            CallLog.Calls.DATE,
            CallLog.Calls.DURATION
    };

    Calendar calendar = Calendar.getInstance();

// 4.3日
// calendar.set(Calendar.MONTH, Calendar.APRIL);
// calendar.set(Calendar.DATE, 3);

    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);

    long startTime = calendar.getTimeInMillis();
    calendar.set(Calendar.HOUR_OF_DAY, 23);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.SECOND, 59);
    calendar.set(Calendar.MILLISECOND, 999);
    long endTime = calendar.getTimeInMillis();

    Uri callLogUri = CallLog.Calls.CONTENT_URI;
    String selection = CallLog.Calls.DATE + " BETWEEN ? AND ?";
    String[] selectionArgs = new String[]{String.valueOf(startTime), String.valueOf(endTime)};


    Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI,
            projection, selection, selectionArgs, CallLog.Calls.DATE + " DESC");

    int number = cursor.getColumnIndex(CallLog.Calls.NUMBER);
    int type = cursor.getColumnIndex(CallLog.Calls.TYPE);
    int date = cursor.getColumnIndex(CallLog.Calls.DATE);
    int duration = cursor.getColumnIndex(CallLog.Calls.DURATION);

    SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd "+"HH:mm:ss");

    int i=0;
    int sumTime=0;
    int callTime=0;
    while(cursor.moveToNext()) {
        String str="";
        String phoneNumber = cursor.getString(number);
        int callType = Integer.parseInt(cursor.getString(type));
        String callDate = cursor.getString(date);
        Date callDayTime = new Date(Long.valueOf(callDate));
        String callDuration = cursor.getString(duration);
        Log.i(TAG, i+"号码: "+phoneNumber);
        Log.i(TAG, "时间: "+simple.format(callDayTime));

        if (callType == CallLog.Calls.OUTGOING_TYPE) {
            str+="呼出 ";
            callTime+=Integer.parseInt(callDuration);
        } else if (callType == CallLog.Calls.INCOMING_TYPE) {
            str+="呼入 ";
        } else if (callType == CallLog.Calls.MISSED_TYPE) {
            str+="未接 ";
        } else if (callType == 36) {
            str+="呼出 ";
        }else {
            str+=type;
        }

// str+=" 时长: "+callDuration;
double duration2=Math.floor(Integer.parseInt(callDuration)/60);
// str+=String.format(“时长: %.1f分 %d秒”,duration2,Integer.parseInt(callDuration)%60);
str+=String.format(“时长: %d分 %d秒”,(int)duration2,Integer.parseInt(callDuration)%60);
Log.i(TAG, str);

// if(callDayTime.getDay())
// 根据需要处理数据
i++;
sumTime+=Integer.parseInt(callDuration);
if(i>200) break;
}
cursor.close();

    int minute=(int)Math.floor(callTime/60);
    String timestr=String.format("呼出时长: %d分 %d秒",minute,callTime%60);

    minute=(int)Math.floor(sumTime/60);
    timestr+=String.format(" 总时长: %d分 %d秒",minute,sumTime%60);
    todayText.setText(""+timestr);

    return sumTime;
}

public void calTime(View view) {
    int sumtime=readReord();

// int minute=(int)Math.floor(sumtime/60);
// String timestr=String.format(“时长: %d分 %d秒”,minute,sumtime%60);
// todayText.setText(“”+timestr);
}
private static final int PERMISSION_REQUEST_CODE = 1;
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被用户同意,可以继续运行需要权限的代码
Toast.makeText(this, “权限被同意”, Toast.LENGTH_SHORT).show();
} else {
// 权限被用户拒绝,引导用户到设置页面手动开启
Toast.makeText(this, “权限被拒绝,请到设置中手动开启”, Toast.LENGTH_SHORT).show();
}
return;
}
}

public void permiss(View view) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_CALL_LOG},
PERMISSION_REQUEST_CODE);
} else {
// 权限已经被授予,可以访问通话记录
}

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
            != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_PHONE_STATE},
                PERMISSION_REQUEST_CODE);
    }
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_CONTACTS},
                PERMISSION_REQUEST_CODE);
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值