|
|
@@ -0,0 +1,116 @@
|
|
|
+package com.sheep.gamegroup.util;
|
|
|
+
|
|
|
+import android.content.ContentResolver;
|
|
|
+import android.content.Context;
|
|
|
+import android.database.Cursor;
|
|
|
+import android.net.Uri;
|
|
|
+import android.provider.CallLog;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.sheep.gamegroup.absBase.AbsObserver;
|
|
|
+import com.sheep.jiuyan.samllsheep.SheepApp;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import io.reactivex.Observable;
|
|
|
+import io.reactivex.ObservableOnSubscribe;
|
|
|
+import io.reactivex.android.schedulers.AndroidSchedulers;
|
|
|
+import io.reactivex.schedulers.Schedulers;
|
|
|
+import rx.functions.Action1;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by realicing on 2019/3/27.
|
|
|
+ * realicing@sina.com
|
|
|
+ * 小绵羊3.5.3新增 -- 获取通话记录
|
|
|
+ */
|
|
|
+public class SMSUtil {
|
|
|
+ public static List<Map<String, Object>> getCallLog(Context context) {
|
|
|
+ List<Map<String, Object>> list = new ArrayList<>();
|
|
|
+ ContentResolver cr = context.getContentResolver();
|
|
|
+ if(cr == null){
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+ Uri uri = CallLog.Calls.CONTENT_URI;
|
|
|
+ String[] projection = new String[] {
|
|
|
+ CallLog.Calls.CACHED_NAME// 通话记录的联系人
|
|
|
+ , CallLog.Calls.NUMBER// 通话记录的电话号码
|
|
|
+ , CallLog.Calls.DATE// 通话记录的日期
|
|
|
+ , CallLog.Calls.DURATION// 通话时长
|
|
|
+ , CallLog.Calls.TYPE// 通话类型
|
|
|
+ };
|
|
|
+ Cursor cursor = cr.query(uri, projection, null, null, null);
|
|
|
+ if (cursor != null) {
|
|
|
+ while (cursor.moveToNext()) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)); //姓名
|
|
|
+ String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)); //号码
|
|
|
+ long dateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)); //获取通话日期
|
|
|
+ int duration = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION));//获取通话时长,值为多少秒
|
|
|
+ int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)); //获取通话类型:1.呼入2.呼出3.未接
|
|
|
+ String date = TimeUtil.TimeStamp2Date(dateLong, "yyyy/MM/dd HH:mm");
|
|
|
+ map.put("name", name);
|
|
|
+ map.put("mobile", number);
|
|
|
+ map.put("date", date);
|
|
|
+ map.put("dateLong", dateLong);
|
|
|
+ map.put("duration", duration);
|
|
|
+ map.put("type", type);
|
|
|
+ list.add(map);
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ cursor.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public static void getCallLog(Action1<String> action1) {
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ if(TestUtil.isDev()) {
|
|
|
+ result.put("explain",
|
|
|
+ "String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)); //姓名\n" +
|
|
|
+ "String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)); //号码\n" +
|
|
|
+ "long dateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)); //获取通话日期\n" +
|
|
|
+ "int duration = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION));//获取通话时长,值为多少秒\n" +
|
|
|
+ "int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)); //获取通话类型:1.呼入2.呼出3.未接\n" +
|
|
|
+ "String date = TimeUtil.TimeStamp2Date(dateLong, \"yyyy/MM/dd HH:mm\");");
|
|
|
+ }
|
|
|
+ Observable.create((ObservableOnSubscribe<JSONObject>) observableEmitter -> {
|
|
|
+ try {
|
|
|
+ long time = System.currentTimeMillis();
|
|
|
+ List<Map<String, Object>> list = getCallLog(SheepApp.getInstance());
|
|
|
+ result.put("code", 200);
|
|
|
+ result.put("msg", "获取通话记录成功");
|
|
|
+ result.put("takeTime", System.currentTimeMillis() - time);
|
|
|
+ result.put("data", list);
|
|
|
+ result.put("total", ListUtil.size(list));
|
|
|
+ } catch (Throwable throwable) {
|
|
|
+ throwable.printStackTrace();
|
|
|
+ result.put("code", 500);
|
|
|
+ result.put("msg", throwable.getMessage());
|
|
|
+ }
|
|
|
+ observableEmitter.onNext(result);
|
|
|
+ })
|
|
|
+ .subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread())
|
|
|
+ .subscribe(new AbsObserver<JSONObject>() {
|
|
|
+ @Override
|
|
|
+ public void onNext(JSONObject result) {
|
|
|
+ action1.call(result.toJSONString());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onError(Throwable throwable) {
|
|
|
+ result.put("code", 600);
|
|
|
+ result.put("msg", throwable.getMessage());
|
|
|
+ action1.call(result.toJSONString());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|