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

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

這篇具有很好參考價(jià)值的文章主要介紹了Android Studio 簡易通訊錄制作 (Java)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

通訊錄首頁:

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

?添加聯(lián)系人頁面:

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

?修改聯(lián)系人:

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

刪除聯(lián)系人:

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

?程序代碼:

MainActivity.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
import android.content.DialogInterface;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;

public class MainActivity extends AppCompatActivity{
    private ImageView iv_add;
    private ListView lv_show;
    private EditText et_name,et_phone;
    private MyAdapter myAdapter;
    private DBHelper dbHelper;
    private List<User> userList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv_add = findViewById(R.id.iv_add);
        lv_show = findViewById(R.id.lv_show);
        if (userList != null) {
            userList.clear();
        }
        dbHelper = new DBHelper(MainActivity.this, "user.db", null, 1);
        updateListView();
        iv_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addData();
            }
        });
        lv_show.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                updateData(position);
            }
        });
        lv_show.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                deleteData(position);
                return true;
            }
        });
    }
    private void addData() {
        AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
        View dialogView=View.inflate(MainActivity.this,R.layout.dialog,null);
        builder.setIcon(R.drawable.icon)
                .setTitle("添加聯(lián)系人")
                .setView(dialogView);
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                et_name=dialogView.findViewById(R.id.et_name);
                et_phone=dialogView.findViewById(R.id.et_pwd);
                String name=et_name.getText().toString();
                String phone=et_phone.getText().toString();
                if (phone.length()!=11){
                    showToast("電話號(hào)碼長度不符合要求");
                }else {
                    User user=dbHelper.get(name);
                    if (user.getName()==null){
                        if (dbHelper.insert(name,phone)){
                            showToast("添加成功");
                            updateListView();
                        }else{
                            showToast("添加失敗");
                        }
                    }else {
                        showToast("該聯(lián)系人已存在");
                    }
                }
            }
        })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
        AlertDialog alertDialog=builder.create();
        alertDialog.show();
    }
    private void deleteData(int position) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setIcon(R.drawable.icon)
                .setTitle("提示")
                .setMessage("是否刪除該聯(lián)系人?")
                .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        User user = (User) myAdapter.getItem(position);
                        String deleteId = user.getId();
                        if (dbHelper.delete(deleteId)) {
                            updateListView();
                            showToast("刪除成功");
                        } else {
                            showToast("刪除失敗");
                        }
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
    }

    private void updateData(int position) {
        View dialogView = View.inflate(MainActivity.this, R.layout.dialog, null);
        User user = (User) myAdapter.getItem(position);
        et_name = dialogView.findViewById(R.id.et_name);
        et_phone = dialogView.findViewById(R.id.et_pwd);
        et_name.setText(user.getName());
        et_phone.setText(user.getPhone());
        String findId = user.getId();
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setIcon(R.drawable.icon)
                .setTitle("修改聯(lián)系人")
                .setView(dialogView)
                .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String name = et_name.getText().toString();
                        String phone = et_phone.getText().toString();
                        if (phone.length()!=11){
                            showToast("電話號(hào)碼長度不符合要求");
                        }else {
                            User user=dbHelper.get(name);
                            if (user.getName()==null){
                                if (dbHelper.update(findId,name,phone)){
                                    showToast("修改成功");
                                    updateListView();
                                }else{
                                    showToast("修改失敗");
                                }
                            }else {
                                showToast("該聯(lián)系人已存在");
                            }
                        }
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
    }
    public void updateListView(){
        userList=dbHelper.query();
        myAdapter=new MyAdapter(userList,MainActivity.this);
        lv_show.setAdapter(myAdapter);
    }
    public void showToast(String msg){
        Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();
    }
}

MyAdapter.java

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

public class MyAdapter extends BaseAdapter {
    //使用list<Nate>,list會(huì)存儲(chǔ)數(shù)據(jù)庫中note表所有記錄。
    private List<User> list;
    //用于將某個(gè)布局轉(zhuǎn)換為view的對(duì)象。
    private LayoutInflater layoutInflater;
    //當(dāng)創(chuàng)建MyAdapter對(duì)象的時(shí)候,需要list的數(shù)據(jù)
    public MyAdapter(List<User> list, Context context){
        this.list=list;
        layoutInflater=LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView==null){
            convertView=layoutInflater.inflate(R.layout.item,null,false);
            viewHolder=new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }else {
            viewHolder=(ViewHolder)convertView.getTag();
        }
        //將數(shù)據(jù)庫中的內(nèi)容加載到對(duì)應(yīng)的控件上
        User user =(User) getItem(position);
        viewHolder.tv_showName.setText(user.getName());
        viewHolder.tv_showPhone.setText(user.getPhone());
        return convertView;
    }
    //用于給item的視圖加載數(shù)據(jù)內(nèi)容。
    class ViewHolder{
        TextView tv_showName,tv_showPhone;
        public ViewHolder(View view){
            tv_showName=view.findViewById(R.id.tv_showName);
            tv_showPhone=view.findViewById(R.id.tv_showPhone);
        }
    }
}

?DBHelper.java

package com.example.myapplication;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class DBHelper extends SQLiteOpenHelper {
    private SQLiteDatabase db;
    ContentValues contentValues = new ContentValues();
    public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        db=this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table user(id integer primary key autoincrement,name text,phone text)");
    }
    //添加數(shù)據(jù)
    public boolean insert(String name,String phone) {
        contentValues.put("name", name);
        contentValues.put("phone", phone);
        long result = db.insert("user", null, contentValues);
        return result > 0 ? true : false;
    }
    public boolean delete(String id){
        int result=db.delete("user","id=?",new String[]{id});
        return result>0?true:false;
    }
    //修改數(shù)據(jù),根據(jù)id進(jìn)行修改
    public boolean update(String id,String name,String phone){
        contentValues.put("id",id);
        contentValues.put("name",name);
        contentValues.put("phone",phone);
        int result=db.update("user",contentValues,"id=?",new String[]{id});
        return result>0?true:false;
    }
    //查詢數(shù)據(jù),查詢表中的所有內(nèi)容,將查詢的內(nèi)容用note的對(duì)象屬性進(jìn)行存儲(chǔ),并將該對(duì)象存入集合中。
    public List<User> query(){
        List<User> list=new ArrayList<>();
        Cursor result=db.query("user",null,null,null,
                null,null,null,null);
        if (result!=null){
            while (result.moveToNext()) {
                User user = new User();
                user.setId(String.valueOf(result.getInt(0)));
                user.setName(result.getString(1));   //1即第二列,指內(nèi)容
                user.setPhone(result.getString(2));  //2即第三列,指時(shí)間
                list.add(user);
            }result.close();
        }return list;
    }

    public User get(String name) {
        User user=new User();
        Cursor result=db.query("user",null,"name=?",new String[]{name},
                null,null,null,null);
        if (result.getCount()==1){
            result.moveToFirst();
            user.setName(result.getString(1));
            user.setPhone(result.getString(2));
            return user;
        }else {
            user.setName(null);
            user.setPhone(null);
            return user;
        }
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

User.java

package com.example.myapplication;

public class User {
    private String id;
    private String name;
    private String phone;
    public String getId() {
        return id;
    }

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

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

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

?activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 ? ?xmlns:app="http://schemas.android.com/apk/res-auto"
 ? ?xmlns:tools="http://schemas.android.com/tools"
 ? ?android:orientation="vertical"
 ? ?android:layout_width="match_parent"
 ? ?android:layout_height="match_parent"
 ? ?tools:context=".MainActivity">
 ? ?<TextView
 ? ? ? ?android:id="@+id/tv_title"
 ? ? ? ?android:gravity="center"
 ? ? ? ?android:textSize="25dp"
 ? ? ? ?android:textColor="@color/B_group_1"
 ? ? ? ?android:background="@color/B_group_3"
 ? ? ? ?android:layout_width="match_parent"
 ? ? ? ?android:layout_height="50dp"
 ? ? ? ?android:text="通訊錄" />

 ? ?<ListView
 ? ? ? ?android:id="@+id/lv_show"
 ? ? ? ?android:layout_width="match_parent"
 ? ? ? ?android:layout_height="match_parent"
 ? ? ? ?android:layout_below="@id/tv_title"
 ? ? ? ?android:background="@color/B_group_4"
 ? ? ? ?android:textColor="@color/B_group_1"></ListView>
 ? ?<ImageView
 ? ? ? ?android:id="@+id/iv_add"
 ? ? ? ?android:layout_alignParentBottom="true"
 ? ? ? ?android:layout_alignParentRight="true"
 ? ? ? ?android:src="@drawable/add"
 ? ? ? ?android:layout_margin="20dp"
 ? ? ? ?android:layout_width="50dp"
 ? ? ? ?android:layout_height="50dp">
 ? ?</ImageView>
</RelativeLayout>

dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 ? ?xmlns:app="http://schemas.android.com/apk/res-auto"
 ? ?xmlns:tools="http://schemas.android.com/tools"
 ? ?android:paddingTop="20dp"
 ? ?android:paddingLeft="40dp"
 ? ?android:paddingRight="40dp"
 ? ?android:paddingBottom="20dp"
 ? ?android:orientation="vertical"
 ? ?android:layout_width="match_parent"
 ? ?android:layout_height="wrap_content">
 ? ?<TextView
 ? ? ? ?android:id="@+id/tv_name"
 ? ? ? ?android:text="姓名"
 ? ? ? ?android:textSize="20dp"
 ? ? ? ?android:textColor="@color/B_group_1"
 ? ? ? ?android:layout_width="match_parent"
 ? ? ? ?android:layout_height="wrap_content"></TextView>
 ? ?<EditText
 ? ? ? ?android:id="@+id/et_name"
 ? ? ? ?android:hint="請(qǐng)輸入姓名"
 ? ? ? ?android:layout_width="match_parent"
 ? ? ? ?android:layout_height="wrap_content"></EditText>
 ? ?<TextView
 ? ? ? ?android:id="@+id/tv_pwd"
 ? ? ? ?android:text="電話"
 ? ? ? ?android:textSize="20dp"
 ? ? ? ?android:textColor="@color/B_group_1"
 ? ? ? ?android:layout_marginTop="20dp"
 ? ? ? ?android:layout_width="match_parent"
 ? ? ? ?android:layout_height="wrap_content"></TextView>
 ? ?<EditText
 ? ? ? ?android:id="@+id/et_pwd"
 ? ? ? ?android:hint="請(qǐng)輸入電話"
 ? ? ? ?android:layout_width="match_parent"
 ? ? ? ?android:layout_height="wrap_content"></EditText>
</LinearLayout>

?item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:padding="10dp"
    android:orientation="horizontal"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/tv_showName"
        android:textColor="@color/B_group_1"
        android:text="測試信息"
        android:layout_weight="1"
        android:textSize="20dp"
        android:layout_width="0dp"
        android:layout_height="wrap_content">
    </TextView>
    <TextView
        android:id="@+id/tv_showPhone"
        android:text="1234566"
        android:layout_weight="2"
        android:inputType="number"
        android:layout_width="0dp"
        android:layout_height="wrap_content">
    </TextView>

</LinearLayout>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
 ? ?<color name="purple_200">#FFBB86FC</color>
 ? ?<color name="purple_500">#FF6200EE</color>
 ? ?<color name="purple_700">#FF3700B3</color>
 ? ?<color name="teal_200">#FF03DAC5</color>
 ? ?<color name="teal_700">#FF018786</color>
 ? ?<color name="black">#FF000000</color>
 ? ?<color name="white">#FFFFFFFF</color>

 ? ?<color name="B_group_1">#0B132B</color>
 ? ?<color name="B_group_2">#A49DBE</color>
 ? ?<color name="B_group_3">#D5CFE1</color>
 ? ?<color name="B_group_4">#E9E7EF</color>
 ? ?<color name="B_group_5">#D8C4C4</color>
</resources>

?詳細(xì)見:https://gitee.com/love1213/Android-Studio-Contacts.git文章來源地址http://www.zghlxwxcb.cn/news/detail-503586.html

到了這里,關(guān)于Android Studio 簡易通訊錄制作 (Java)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于java的Android手機(jī)通訊錄【詳細(xì)】【完整代碼】

    基于java的Android手機(jī)通訊錄【詳細(xì)】【完整代碼】

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

    2024年02月09日
    瀏覽(24)
  • Android手機(jī)通訊錄(上)

    Android手機(jī)通訊錄(上)

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

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

    基于Android的手機(jī)通訊錄設(shè)計(jì)

    目 錄 1.系統(tǒng)描述 1 1.1 問題描述 1 1.2 功能描述 1 1.3 數(shù)據(jù)需求 2 1.4 設(shè)計(jì)意義 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ù)據(jù)庫 9 2.3.1 SQLite數(shù)據(jù)庫 9 2.3.2 SQLite數(shù)據(jù)庫特點(diǎn) 10

    2024年02月09日
    瀏覽(19)
  • Android 獲取手機(jī)通訊錄聯(lián)系人信息

    Android 獲取手機(jī)通訊錄聯(lián)系人信息

    近日在項(xiàng)目開發(fā)過程中發(fā)現(xiàn),華為手機(jī)HarmonyOS 3.0系統(tǒng),設(shè)置隱私 里面可以查看各個(gè)應(yīng)用訪問隱私權(quán)限的次數(shù),發(fā)現(xiàn)應(yīng)用程序訪問手機(jī)通訊錄的次數(shù)異常的高,針對(duì)訪問通訊錄頻次高的問題做了研究和優(yōu)化 問題分析: 分析代碼發(fā)現(xiàn)只要通過ContentProvider 訪問通訊錄一次,統(tǒng)計(jì)

    2024年02月12日
    瀏覽(27)
  • Java實(shí)現(xiàn)通訊錄

    Java實(shí)現(xiàn)通訊錄

    前言:通訊錄非常適合前期需要練習(xí)語法的小伙伴,效果非常好。 水再渾濁,只要長久沉淀,依然會(huì)分外清澈。 人再愚鈍,只要足夠努力,一樣能改寫命運(yùn)。 此通訊錄的功能包括: 1.刪除聯(lián)系人 2.增加聯(lián)系人 3.展示已有聯(lián)系人 4.查找聯(lián)系人 5.排序聯(lián)系人 6.退出通訊錄 聯(lián)系人

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

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

    2024年02月08日
    瀏覽(42)
  • Java程序-個(gè)人通訊錄管理

    Java程序-個(gè)人通訊錄管理

    摘 要 隨著社會(huì)的發(fā)展,人際關(guān)系變得越來越重要,為了保持良好的人際關(guān)系,必須經(jīng)常與親戚、朋友、同學(xué)、同事和其它一些人保持聯(lián)系。因此,為了能夠快速查找到聯(lián)系人的信息,節(jié)省查找時(shí)間,可以創(chuàng)建一個(gè)個(gè)人通訊錄管理系統(tǒng)。 通過編寫并調(diào)試一個(gè)Java應(yīng)用軟件,連接

    2024年01月16日
    瀏覽(21)
  • 簡單通訊錄管理系統(tǒng)(Java)

    簡單通訊錄管理系統(tǒng)(Java)

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 ? ? 任務(wù) : 在之前的練習(xí)任務(wù)中,我們已經(jīng)實(shí)現(xiàn)了通訊錄的增刪改查等基本功能,主要實(shí)現(xiàn)一個(gè)通訊錄的菜單管理功能。 仔細(xì)閱讀右側(cè)編輯區(qū)內(nèi)給出的代碼框架及注釋,在 Begin-End 中實(shí)現(xiàn)通訊錄菜單管

    2024年02月09日
    瀏覽(97)
  • AndroidStudio課程設(shè)計(jì)-通訊錄系統(tǒng)(高分畢設(shè),Android期末作業(yè),Android課設(shè),AndroidStudio)

    AndroidStudio課程設(shè)計(jì)-通訊錄系統(tǒng)(高分畢設(shè),Android期末作業(yè),Android課設(shè),AndroidStudio)

    博主介紹: 本人專注于Android/java/數(shù)據(jù)庫/微信小程序技術(shù)領(lǐng)域的開發(fā),以及有好幾年的計(jì)算機(jī)畢業(yè)設(shè)計(jì)方面的實(shí)戰(zhàn)開發(fā)經(jīng)驗(yàn)和技術(shù)積累;尤其是在安卓(Android)的app的開發(fā)和微信小程序的開發(fā),很是熟悉和了解;本人也是多年的Android開發(fā)人員;希望我發(fā)布的此篇文件可以幫

    2024年02月04日
    瀏覽(23)
  • Android之抓取短信,所有應(yīng)用信息,通訊錄,通話記錄,手機(jī)系統(tǒng)相冊(cè)圖片

    一般我們做金融APP會(huì)遇到風(fēng)控需求,需要獲取用戶手機(jī)短信,手機(jī)所有安裝應(yīng)用信息,通訊錄,通話記錄等功能,接下來我們看看怎么做,一篇文章解決所有! 這里我只需要這些字段,需要更多自己添加 1.kotlin 2.java 1.kotlin 2.Java 1.kotlin 2.Java 這篇文章比較長,懶得分開成幾篇

    2024年02月16日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包