国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android之抓取短信,所有應用信息,通訊錄,通話記錄,手機系統(tǒng)相冊圖片

這篇具有很好參考價值的文章主要介紹了Android之抓取短信,所有應用信息,通訊錄,通話記錄,手機系統(tǒng)相冊圖片。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

一般我們做金融APP會遇到風控需求,需要獲取用戶手機短信,手機所有安裝應用信息,通訊錄,通話記錄等功能,接下來我們看看怎么做,一篇文章解決所有!


一、抓取這些玩意需要的權限

1.kotlin

            //6.0才用動態(tài)權限
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (activity?.let {
                        ContextCompat.checkSelfPermission(
                            it,
                            Manifest.permission.READ_SMS
                        )
                    }
                    != PackageManager.PERMISSION_GRANTED
                ) {
                    // 申請讀寫內存卡內容和拍照 獲取短信,獲取通話記錄,獲取通訊錄權限
                    activity?.let {
                        ActivityCompat.requestPermissions(
                            it, arrayOf(
                                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                                Manifest.permission.CAMERA,
                                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                                Manifest.permission.READ_SMS,
                                Manifest.permission.READ_CALL_LOG,
                                Manifest.permission.READ_CONTACTS
                            ), 1
                        )
                    }
                } else {
                    startActivity(Intent(activity, UotyActivity::class.java))
                }
            }

2.Java

    //6.0才用動態(tài)權限
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_SMS)
                        != PackageManager.PERMISSION_GRANTED) {
                    // 申請讀寫內存卡內容和拍照 獲取短信,獲取通話記錄,獲取通訊錄權限
                    ActivityCompat.requestPermissions(getActivity(),
                            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA,
                                    Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_SMS, Manifest.permission.READ_CALL_LOG, Manifest.permission.READ_CONTACTS}, 1);
                } else {
                    startActivity(new Intent(getActivity(), UotyActivity.class));
                }
            }

二、獲取手機短信

1.kotlin

    /**
     * 獲取通短信
     */
    @SuppressLint("Range")
    private fun getSMS() {
        val uri = Uri.parse("content://sms/")
        val projection = arrayOf("_id", "address", "person", "body", "date", "type")
        val cursor = contentResolver.query(uri, projection, null, null, "date desc")
        if (cursor != null && cursor.moveToFirst()) {
            do {
                val bean = SMSBean()
                val id = cursor.getString(cursor.getColumnIndex("_id")) //id
                val address = cursor.getString(cursor.getColumnIndex("address")) //電話
                val person = cursor.getString(cursor.getColumnIndex("person")) //姓名
                val body = cursor.getString(cursor.getColumnIndex("body")) //內容
                val date = cursor.getString(cursor.getColumnIndex("date")) //時間戳
                val type = cursor.getString(cursor.getColumnIndex("type")) //類型1為收短信,2為發(fā)短信
                var name: String = getContactNameFromNumber(address) + ""
                var phoneNumber: String = getContactPhoneNumberFromNumber(address) + ""
                if (name == "" || name == "null") {
                    name = address
                }
                if (phoneNumber == "" || phoneNumber == "null") {
                    phoneNumber = name
                }
                println("獲取短信信息:id: $id, name: $name,phone:$phoneNumber, person: $person, body: $body, date: $date, type: $type")
                bean.id = id
                bean.name = name
                bean.person = person
                bean.body = body
                bean.date = date
                bean.phone = phoneNumber
                bean.type = type
                //這里的smsBeanList是一個MutableList<SMSBean>可變集合
                smsBeanList.add(bean)
            } while (cursor.moveToNext())
        }
        cursor?.close()
        //這里JSON字符串是給后臺的
        json = Gson().toJson(smsBeanList)
        println("獲取短信信息json:$json")
    }

2.Java

/**
     * 獲取通短信
     */
    @SuppressLint("Range")
    private void getSMS() {
        Uri uri = Uri.parse("content://sms/");
        String[] projection = new String[]{"_id", "address", "person", "body", "date", "type"};
        Cursor cursor = getContentResolver().query(uri, projection, null, null, "date desc");
        if (cursor != null && cursor.moveToFirst()) {
            do {
                SMSBean bean = new SMSBean();
                String id = cursor.getString(cursor.getColumnIndex("_id"));//id
                String address = cursor.getString(cursor.getColumnIndex("address"));//電話
                String person = cursor.getString(cursor.getColumnIndex("person"));//姓名
                String body = cursor.getString(cursor.getColumnIndex("body"));//內容
                String date = cursor.getString(cursor.getColumnIndex("date"));//時間戳
                String type = cursor.getString(cursor.getColumnIndex("type"));//類型1為收短信,2為發(fā)短信
                String name = getContactNameFromNumber(address) + "";
                String phoneNumber = getContactPhoneNumberFromNumber(address) + "";
                if (name.equals("") || name.equals("null")) {
                    name = address;
                }
                if (phoneNumber.equals("") || phoneNumber.equals("null")) {
                    phoneNumber = name;
                }
                System.out.println("獲取短信信息:" + "id: " + id + ", name: " + name + ",phone:" + phoneNumber + ", person: " + person + ", body: " + body + ", date: " + date + ", type: " + type);
                bean.setId(id);
                bean.setName(name);
                bean.setPerson(person);
                bean.setBody(body);
                bean.setDate(date);
                bean.setPhone(phoneNumber);
                bean.setType(type);
                //這里的smsBeanList是一個List<SMSBean>集合
                smsBeanList.add(bean);
            } while (cursor.moveToNext());
        }
        if (cursor != null) {
            cursor.close();
        }
        //這里JSON字符串是給后臺的
        json = new Gson().toJson(smsBeanList);
        System.out.println("獲取短信信息json:" + json);

三、獲取手機所有應用信息

1.kotlin

 // 獲取已安裝的應用信息隊列
    @SuppressLint("WrongConstant")
    fun getAppInfo(ctx: Context, type: Int): MutableList<AppInfo> {
        val appList: ArrayList<AppInfo> = ArrayList<AppInfo>()
        val siArray = SparseIntArray()
        // 獲得應用包管理器
        val pm = ctx.packageManager
        // 獲取系統(tǒng)中已經安裝的應用列表
        val installList = pm.getInstalledApplications(
            PackageManager.PERMISSION_GRANTED
        )
        for (i in installList.indices) {
            val item = installList[i]
            // 去掉重復的應用信息
            if (siArray.indexOfKey(item.uid) >= 0) {
                continue
            }
            // 往siArray中添加一個應用編號,以便后續(xù)的去重校驗
            siArray.put(item.uid, 1)
            try {
                // 獲取該應用的權限列表
                val permissions = pm.getPackageInfo(
                    item.packageName, PackageManager.GET_PERMISSIONS
                ).requestedPermissions ?: continue
                var isQueryNetwork = false
                for (permission in permissions) {
                    // 過濾那些具備上網權限的應用
                    if (permission == "android.permission.INTERNET") {
                        isQueryNetwork = true
                        break
                    }
                }
                // 類型為0表示所有應用,為1表示只要聯(lián)網應用
                if (type == 0 || type == 1 && isQueryNetwork) {
                    try {
                        val packageInfo = pm.getPackageInfo(packageName, 0)
                        //應用裝時間
                        firstInstallTime = packageInfo.firstInstallTime.toString() + ""
                        //應用最后一次更新時間
                        val lastUpdateTime = packageInfo.lastUpdateTime
                    } catch (e: PackageManager.NameNotFoundException) {
                        e.printStackTrace()
                    }
                    val app = AppInfo()
                    app.setUid(item.uid.toString() + "") // 獲取應用的編號
                    app.setPackagename(item.packageName)
                    app.setName(item.loadLabel(pm).toString())
                    app.setTime(firstInstallTime)
                    appList.add(app)
                }
            } catch (e: java.lang.Exception) {
                e.printStackTrace()
                continue
            }
        }
        return appList // 返回去重后的應用包隊列
    }

//這里得到JSON字符串appInfoList是可變集合MutableList<AppInfo>
 appInfoList = getAppInfo(this@UotyActivity, 0)
 json = Gson().toJson(appInfoList)

2.Java

 // 獲取已安裝的應用信息隊列
    public ArrayList<AppInfo> getAppInfo(Context ctx, int type) {
        ArrayList<AppInfo> appList = new ArrayList<AppInfo>();
        SparseIntArray siArray = new SparseIntArray();
        // 獲得應用包管理器
        PackageManager pm = ctx.getPackageManager();
        // 獲取系統(tǒng)中已經安裝的應用列表
        @SuppressLint("WrongConstant")
        List<ApplicationInfo> installList = pm.getInstalledApplications(
                PackageManager.PERMISSION_GRANTED);
        for (int i = 0; i < installList.size(); i++) {
            ApplicationInfo item = installList.get(i);
            // 去掉重復的應用信息
            if (siArray.indexOfKey(item.uid) >= 0) {
                continue;
            }
            // 往siArray中添加一個應用編號,以便后續(xù)的去重校驗
            siArray.put(item.uid, 1);
            try {
                // 獲取該應用的權限列表
                String[] permissions = pm.getPackageInfo(item.packageName,
                        PackageManager.GET_PERMISSIONS).requestedPermissions;
                if (permissions == null) {
                    continue;
                }
                boolean isQueryNetwork = false;
                for (String permission : permissions) {
                    // 過濾那些具備上網權限的應用
                    if (permission.equals("android.permission.INTERNET")) {
                        isQueryNetwork = true;
                        break;
                    }
                }
                // 類型為0表示所有應用,為1表示只要聯(lián)網應用
                if (type == 0 || (type == 1 && isQueryNetwork)) {
                    try {
                        PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
                        //應用裝時間
                        firstInstallTime = packageInfo.firstInstallTime + "";
                        //應用最后一次更新時間
                        long lastUpdateTime = packageInfo.lastUpdateTime;

                    } catch (PackageManager.NameNotFoundException e) {
                        e.printStackTrace();
                    }
                    AppInfo app = new AppInfo();
                    app.setUid(item.uid + ""); // 獲取應用的編號
                    app.setPackagename(item.packageName);
                    app.setName(item.loadLabel(pm).toString());
                    app.setTime(firstInstallTime);
                    appList.add(app);
                }
            } catch (Exception e) {
                e.printStackTrace();
                continue;
            }
        }
        return appList;  // 返回去重后的應用包隊列
    }
//這里得到JSON字符串appInfoList是集合List<AppInfo>
 appInfoList = getAppInfo(UotyActivity.this, 0);
 json = new Gson().toJson(appInfoList);

三、獲取通訊錄

1.獲取通訊錄工具類

/**
 * @Author : CaoLiulang
 * @Time : 2023/7/10 09:13
 * @Description :獲取聯(lián)系人工具類
 */
public class ContactUtils {
    private final Context context;
    private List<MessageBean> contactData;

    public ContactUtils(Context context) {
        this.context = context;
    }

    //獲取聯(lián)系人所有信息(這里返回String,你也可以直接返回其他類型改改就可以了)
    @SuppressLint("Range")
    public List<MessageBean> getInformation() throws JSONException {
        contactData = new ArrayList<>();
        int num = 0;
        // 獲得所有的聯(lián)系人
        Cursor cur = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
        // 循環(huán)遍歷
        if (cur.moveToFirst()) {
            int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);
            int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
            do {
                MessageBean messageBean = new MessageBean();

                num++;
                // 獲得聯(lián)系人的ID號
                String contactId = cur.getString(idColumn);
                // 獲得聯(lián)系人姓名
                String disPlayName = cur.getString(displayNameColumn);
                // 查看該聯(lián)系人有多少個電話號碼。如果沒有這返回值為0
                int phoneCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                messageBean.setDisplayName(disPlayName);
                messageBean.setId(contactId);
                if (phoneCount > 0) {
                    // 獲得聯(lián)系人的電話號碼
                    Cursor phones = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                    if (phones.moveToFirst()) {
                        do {

                            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            messageBean.setPhoneNumber(phoneNumber);

                        } while (phones.moveToNext());
                    }
                    // 獲取該聯(lián)系人郵箱
                    Cursor emails = context.getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                    if (emails.moveToFirst()) {
                        do {
                            String emailValue = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                            messageBean.setEmail(emailValue);

                        } while (emails.moveToNext());
                    }
                    contactData.add(messageBean);
                }
            } while (cur.moveToNext());
        }
        Log.e("聯(lián)系人信息=====", contactData.toString());
        return contactData;
    }

}

2.MessageBean

這里我只需要這些字段,需要更多自己添加

public class MessageBean {
    private String id;
    private String phoneNumber;
    private String displayName;
    private String email;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

3.kotlin引用

//實例化工具類
 ContactUtils mobiletype = ContactUtils(this)
//list為MutableList<MessageBean>  
  list = mobiletype.information
  json = Gson().toJson(list)

4.Java引用

//實例化工具類
ContactUtils mobiletype = new ContactUtils(this);
//list為List<MessageBean>
 list = mobiletype.getInformation();
 json = new Gson().toJson(list);

四、通話記錄

1.LogBean

public class LogBean {
    public String id;
    public String name;
    public String number;
    public String date;
    public String duration;
    public String type;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getDuration() {
        return duration;
    }

    public void setDuration(String duration) {
        this.duration = duration;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "LogBean{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", number='" + number + '\'' +
                ", date='" + date + '\'' +
                ", duration='" + duration + '\'' +
                ", type='" + type + '\'' +
                '}';
    }
}

2.kotlin引用

 /**
     * 獲取通話記錄
     */
    @SuppressLint("Range")
    private fun getLog() {
        val uri = CallLog.Calls.CONTENT_URI
        val projection = arrayOf(
            CallLog.Calls._ID,
            CallLog.Calls.CACHED_NAME,
            CallLog.Calls.NUMBER,
            CallLog.Calls.DATE,
            CallLog.Calls.DURATION,
            CallLog.Calls.TYPE
        )
        val cursor =
            contentResolver.query(uri, projection, null, null, CallLog.Calls.DEFAULT_SORT_ORDER)
        if (cursor != null && cursor.moveToFirst()) {
            do {
                val bean = LogBean()
                val id =
                    cursor.getString(cursor.getColumnIndex(CallLog.Calls._ID))
                val number =
                    cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER))
                val name =
                    cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME))
                val date =
                    cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE))
                val duration =
                    cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION))
                val type =
                    cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE))
                bean.setId(id)
                bean.setName(name)
                bean.setDate(date)
                bean.setType(type)
                bean.setNumber(number)
                bean.setDuration(duration)
                logbean.add(bean)
                println("獲取通話記錄:id: $id,name$name, number: $number, date: $date, duration: $duration, type: $type")
            } while (cursor.moveToNext())
        }
        cursor?.close()
        //logbean為可變集合MutableList<LogBean>
        json = Gson().toJson(logbean)
        println("上傳文件JSON:$json")
    }

3.Java引用

 /**
     * 獲取通話記錄
     */
    @SuppressLint("Range")
    private void getLog() {
        Uri uri = CallLog.Calls.CONTENT_URI;
        String[] projection = new String[]{CallLog.Calls._ID, CallLog.Calls.CACHED_NAME, CallLog.Calls.NUMBER, CallLog.Calls.DATE, CallLog.Calls.DURATION, CallLog.Calls.TYPE};
        Cursor cursor = getContentResolver().query(uri, projection, null, null, CallLog.Calls.DEFAULT_SORT_ORDER);
        if (cursor != null && cursor.moveToFirst()) {
            do {
                LogBean bean = new LogBean();
                String id = cursor.getString(cursor.getColumnIndex(CallLog.Calls._ID));
                String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
                String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
               String date = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE));
               String duration = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));
              String type = cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE));
                bean.setId(id);
                bean.setName(name);
                bean.setDate(date);
                bean.setType(type);
                bean.setNumber(number);
                bean.setDuration(duration);
                //logbean為集合List<LogBean>
                logbean.add(bean);
                System.out.println("獲取通話記錄:" + "id: " + id + ",name" + name + ", number: " + number + ", date: " + date + ", duration: " + duration + ", type: " + type);
            } while (cursor.moveToNext());
        }
        if (cursor != null) {
            cursor.close();
        }
        json = new Gson().toJson(logbean);
    }

五、系統(tǒng)相冊

1.ImagBean

public class ImagBean {
    private String url;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    @Override
    public String toString() {
        return "ImagBean{" +
                "url='" + url + '\'' +
                '}';
    }
}

2.kotlin

    /**
     * 獲取系統(tǒng)相冊圖片
     */
    @SuppressLint("Range")
    private fun getImag() {
        val mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
        // 獲得圖片
        val mCursor = contentResolver.query(
            mImageUri,
            null,
            MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?",
            arrayOf("image/jpeg", "image/png"),
            MediaStore.Images.Media.DATE_MODIFIED
        )
        val count = mCursor!!.count
        println("圖片數(shù)量總量:$count")
        var sl = 0
        if (count > 0) {
            while (mCursor.moveToNext()) {
                val path =
                    mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)) // 路徑 imageView.setImageURI(Uri.parse(path));
                val name =
                    mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME))
                val exif = ExifInterface(path)
                val date = exif.getAttribute(ExifInterface.TAG_DATETIME) + "" //時間
                if (date == "" || date == "null") {
                } else {
                    val yer: String = getStrBefore(date)
                    val yer1 = yer.replace(":".toRegex(), "-")
                    val da: String = getStrAfter(date)
                    val zzstr = "$yer1 $da"
                    val rigtime = Date().time - 24 * 30 * 60 * 60 * 1000L
                    println("圖片時間打?。? + rigtime + "   " + zzstr + "    " + dateToStamp(zzstr) + "   " + Date().time)
                    if (dateToStamp(zzstr)!! > rigtime) { //一個月內的圖片
                        sl++
                        //只取90張圖片
                        if (imagBeanList.size < 90) {
//                        //imgPath就是壓縮后的圖片
//                        String imgPath = BitmapUtil.compressImageUpload(path);
                            val bean = ImagBean()
                            bean.url = path
                            //imagBeanList為 MutableList<ImagBean>
                            imagBeanList.add(bean)
                            println("圖片路徑打印:$path---->$name")
                        }
                    }
                }
            }
            println("圖片數(shù)量一個月內圖片數(shù)量:$sl")
            println("圖片數(shù)量--->:" + imagBeanList.size)
            val imagjson = Gson().toJson(imagBeanList)
            println("上傳文件imagBeanList數(shù)組打?。?/span>$imagjson")
        }
    }

3.Java

  /**
     * 獲取系統(tǒng)相冊圖片
     */
    private void getImag() throws IOException, java.text.ParseException {
        Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        // 獲得圖片
        Cursor mCursor = getContentResolver().query(mImageUri, null,
                MediaStore.Images.Media.MIME_TYPE + "=? or "
                        + MediaStore.Images.Media.MIME_TYPE + "=?",
                new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED);

        int count = mCursor.getCount();
        System.out.println("圖片數(shù)量總量:" + count);
        int sl = 0;
        if (count > 0) {
            while (mCursor.moveToNext()) {
                @SuppressLint("Range") String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA));// 路徑 imageView.setImageURI(Uri.parse(path));
                @SuppressLint("Range") String name = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
                ExifInterface exif = new ExifInterface(path);
                String date = exif.getAttribute(ExifInterface.TAG_DATETIME) + "";//時間
                if (date.equals("") || date.equals("null")) {

                } else {
                    String yer = getStrBefore(date);
                    String yer1 = yer.replaceAll(":", "-");
                    String da = getStrAfter(date);
                    String zzstr = yer1 + " " + da;
                    long rigtime = new Date().getTime() - 24 * 30 * 60 * 60 * 1000L;
                    System.out.println("圖片時間打?。? + rigtime + "   " + zzstr + "    " + dateToStamp(zzstr) + "   " + new Date().getTime());

                    if (dateToStamp(zzstr) > rigtime) {//一個月內的圖片
                        sl++;
                        if (imagBeanList.size() < 90) {
//                        //imgPath就是壓縮后的圖片
//                        String imgPath = BitmapUtil.compressImageUpload(path);
                            ImagBean bean = new ImagBean();
                            bean.setUrl(path);
                            //這里的imagBeanList為List<ImagBean>
                            imagBeanList.add(bean);
                            System.out.println("圖片路徑打?。? + path + "---->" + name);
                        }
                    }
                }
            }
            System.out.println("圖片數(shù)量一個月內圖片數(shù)量:" + sl);
            System.out.println("圖片數(shù)量--->:" + imagBeanList.size());
            String imagjson = new Gson().toJson(imagBeanList);
            System.out.println("imagBeanList數(shù)組打?。? + imagjson);
        }
    }

4.將時間轉換為時間戳

1.kotlin

 @Throws(android.net.ParseException::class, ParseException::class)
    fun dateToStamp(time: String?): Long? {
        val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
        val date = simpleDateFormat.parse(time)
        return date.time
    }

2.java

   public Long dateToStamp(String time) throws ParseException, java.text.ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = simpleDateFormat.parse(time);
        long ts = date.getTime();
        return ts;
    }

5.截取特定字符前后方法

1.kotlin

 //截取字符串前面文本
    private fun getStrBefore(query: String): String {
        val split = query.split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
        return split[0]
    }

    //截取字符串后面文本
    private fun getStrAfter(query: String): String {
        val split = query.split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
        return split[1]
    }

2.Java

    //截取字符串前面文本
    private String getStrBefore(String query) {
        String[] split = query.split(" ");
        String result = split[0];
        return result;
    }

    //截取字符串后面文本
    private String getStrAfter(String query) {
        String[] split = query.split(" ");
        String result = split[1];
        return result;
    }

六、JSON字符串寫成文件

把獲取到這些轉為JSON字符串后寫入文件,把文件傳給后臺

1.kotlin


    fun WriteSd(str: String): File? {
        println("字符串打?。?/span>$str")
        try {
            val dirPath =
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).path + "/contact"
            val dir = File(dirPath)
            if (!dir.exists()) {
                //創(chuàng)建目錄
                dir.mkdirs()
            }
            val file = File(dir.canonicalPath + "/" + "contact.json")
            if (file.exists()) {
                file.delete()
            }
            file.createNewFile()
            val out = FileOutputStream(file)
            val outputStreamWrite = OutputStreamWriter(out, "utf-8")
            outputStreamWrite.write(str)
            outputStreamWrite.close()
            out.close()
            println("文件寫入成功:" + file.canonicalPath)
            return file
        } catch (e: java.lang.Exception) {
            println("文件寫入失?。? + e.message)
            e.printStackTrace()
        }
        return null
    }

2.Java

    private File WriteSd(String str) {
        System.out.println("字符串打?。? + str);
        try {
            String dirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).getPath() + "/contact";
            File dir = new File(dirPath);
            if (!dir.exists()) {
                //創(chuàng)建目錄
                dir.mkdirs();
            }
            File file = new File(dir.getCanonicalPath() + "/" + "contact.json");
            if (file.exists()) {
                file.delete();
            }
            file.createNewFile();
            FileOutputStream out = new FileOutputStream(file);
            OutputStreamWriter outputStreamWrite = new OutputStreamWriter(out, "utf-8");
            outputStreamWrite.write(str);
            outputStreamWrite.close();
            out.close();
            System.out.println("文件寫入成功:" + file.getCanonicalPath());
            return file;
        } catch (Exception e) {
            System.out.println("文件寫入失敗:" + e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

3.引用

1.kotlin

val file: File = WriteSd(json)!!

2.Java

File file = WriteSd(json);

總結

這篇文章比較長,懶得分開成幾篇博客去寫,直接一篇歸納得了,需要的認真看完,需要當中單獨哪一個都可以,歡迎指正!文章來源地址http://www.zghlxwxcb.cn/news/detail-575705.html

到了這里,關于Android之抓取短信,所有應用信息,通訊錄,通話記錄,手機系統(tǒng)相冊圖片的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【創(chuàng)作贏紅包】循序漸進的全版本通訊錄詳解,可保存信息的動態(tài)通訊錄

    【創(chuàng)作贏紅包】循序漸進的全版本通訊錄詳解,可保存信息的動態(tài)通訊錄

    之前的博客里我們實現(xiàn)了 靜態(tài) 的通訊錄。|??ω?` ) 靜態(tài)通訊錄,適合初學者的手把手一條龍講解_陳大大陳的博客-CSDN博客 這個版本的通訊錄 無法實現(xiàn)容量的動態(tài)增加,也無法保存我們輸入的信息。(??へ??╬) 靜態(tài)通訊錄,是直接開辟100塊空間內存來供使用,但是這樣

    2023年04月17日
    瀏覽(161)
  • Android手機通訊錄制作

    Android手機通訊錄制作

    設計一個基于Android的手機通訊錄,此通訊錄包括添加、搜索、修改、刪除聯(lián)系人的功能。 添加、編輯、刪除功能 點擊通訊錄主界面選項菜單中的“添加聯(lián)系人”菜單項,進入添加聯(lián)系人界面,輸入聯(lián)系人的基本信息,包括姓名、手機號碼、家庭地址、單位名稱、Email、QQ號這

    2024年02月08日
    瀏覽(32)
  • Android手機通訊錄(上)

    Android手機通訊錄(上)

    可以實現(xiàn)添加聯(lián)系人,刪除聯(lián)系人,修改聯(lián)系人,查找號碼,查詢聯(lián)系人信息等功能。 具體實現(xiàn)界面如圖所示。 相關代碼介紹如下: Android項目配置AndroidManifest.xml 手機通訊錄程序主界面類MyContactsActivity.java 手機通訊錄程序數(shù)據庫類MyDB.java 手機通訊錄程序添加、編輯、查看信

    2024年02月12日
    瀏覽(19)
  • 基于Android的手機通訊錄設計

    基于Android的手機通訊錄設計

    目 錄 1.系統(tǒng)描述 1 1.1 問題描述 1 1.2 功能描述 1 1.3 數(shù)據需求 2 1.4 設計意義 2 2.背景介紹 2 2.1 Android系統(tǒng)概述 2 2.2 Android開發(fā)組件 4 2.2.1 Activity組件 4 2.2.2 Service 組件 7 2.2.3 BroadcastReceiver 組件 8 2.2.4 Content Provider 組件 8 2.3 Android數(shù)據庫 9 2.3.1 SQLite數(shù)據庫 9 2.3.2 SQLite數(shù)據庫特點 10

    2024年02月09日
    瀏覽(19)
  • kali 使用后臺進行手機拍照,查看定位,獲取信息,(通訊錄等操作)

    kali 使用后臺進行手機拍照,查看定位,獲取信息,(通訊錄等操作)

    控制安卓手機拍照,查看定位,獲取通信錄 引言 準備工作 1. kali、手機 2.戴上眼睛注意別敲錯命令,復制的時候注意看! 開始了?。。?First Second ** 大家好,我是Zues,今天我來教會大家一個入侵安卓手機控制手機拍照,查看定位,獲取通信錄,查看手機內容。 本作品只適用于

    2024年02月20日
    瀏覽(30)
  • python實現(xiàn)手機通訊錄和學生信息管理系統(tǒng)(4種方法)

    python實現(xiàn)手機通訊錄和學生信息管理系統(tǒng)(4種方法)

    1.手機通訊錄: 通訊錄是記錄了聯(lián)系人姓名和聯(lián)系方式的名錄,手機通訊錄是最常見的通訊錄之一,人們可以在通訊錄中通過姓名查看相關聯(lián)系人的聯(lián)系方式、郵箱、地址等信息,也可以在其中新增聯(lián)系人,或修改、刪除聯(lián)系人信息。下面是一個常見通訊錄的功能菜單,如圖

    2024年02月09日
    瀏覽(44)
  • Android Studio 簡易通訊錄制作 (Java)

    Android Studio 簡易通訊錄制作 (Java)

    通訊錄首頁: ?添加聯(lián)系人頁面: ?修改聯(lián)系人: 刪除聯(lián)系人: ?程序代碼: MainActivity.java MyAdapter.java ?DBHelper.java User.java ?activity_main.xml dialog.xml ?item.xml colors.xml ?詳細見:https://gitee.com/love1213/Android-Studio-Contacts.git

    2024年02月11日
    瀏覽(26)
  • 基于java的Android手機通訊錄【詳細】【完整代碼】

    基于java的Android手機通訊錄【詳細】【完整代碼】

    提示:代碼在基本模塊中,教程純文字,推薦兩個屏幕一邊看代碼一邊看教程 簡易Android通訊錄系統(tǒng),只要半天就能寫完! (博主安卓一些功能用的不熟練) 需要掌握學習的知識點: 1、基本的UI界面編寫。 2、Intent的基本使用。 3、Menu的基本使用。 4、RecyclerView的基本使用。

    2024年02月09日
    瀏覽(24)
  • Flutter Android & IOS 獲取通訊錄聯(lián)系人列表

    1.在 pubspec.yaml 文件中添加 contacts_service 和 permission_handler 插件的依賴: 2.在你的 Dart 代碼中,導入 contacts_service 插件: 3.權限請求: Android 需要在 android/app/src/main/AndroidManifest.xml 文件中添加以下內容: IOS 需要在 ios/Runner/Info.plist 文件中添加以下內容: 在ios系統(tǒng)上如果進行

    2024年02月08日
    瀏覽(42)
  • 【數(shù)據結構】:順序表及其通訊錄應用

    【數(shù)據結構】:順序表及其通訊錄應用

    1.1為什么會存在數(shù)據結構? 我們常常接觸到諸如生活中的姓名、身份證、網頁內的圖片、視頻等各種各樣的信息,這些信息就是我們常說的數(shù)據。在使用這些數(shù)據時,我們發(fā)現(xiàn)隨著數(shù)據的增加,當我們要單獨尋找某一個數(shù)據時就會非常困難,就像圖書館內書籍如果沒有按一定

    2024年04月26日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包