You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Git联系人提取库集成、权限及使用方法咨询

关于集成Android Contact Extractor的完整指南

别担心,作为Android新手遇到这些问题很正常,我一步步给你讲清楚所有疑问和操作步骤:

1. 不需要把包提取到本地,直接用远程依赖即可

这个库已经发布到Maven公共仓库了,你完全不用手动复制代码到本地项目。只需要通过Gradle配置依赖,它会自动帮你下载并引入库文件:

  • 打开Module级别build.gradle(注意不是Project级别的配置文件),在dependencies代码块里添加:
    implementation 'com.coderconsole.cextracter:contact-extractor:1.0.0'
    
  • 点击Android Studio右上角的「Sync Now」按钮,等待Gradle同步完成即可。

2. 原Git项目清单没有READ_CONTACTS权限的原因

这个项目是一个Android Library模块,不是独立的Android应用。在Android开发规则里,库模块不需要声明它用到的权限——权限是属于最终打包的宿主应用的。库只是“调用”这个权限,但必须由你的APP在自己的AndroidManifest.xml中声明,系统才会识别并允许APP访问联系人。所以你自己的APP清单里必须添加这个权限,而原项目的库清单不需要。

3. 完整集成&使用步骤(含权限请求和按钮功能)

我把步骤拆得非常细,跟着做就能实现需求:

步骤1:添加权限到你的APP清单

打开AndroidManifest.xml,在<manifest>标签内(<application>标签外面)添加权限声明:

<uses-permission android:name="android.permission.READ_CONTACTS"/>

步骤2:在布局中添加「访问联系人列表」按钮

打开你的Activity布局文件(比如activity_main.xml),添加一个按钮:

<Button
    android:id="@+id/btn_get_contacts"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="访问联系人列表"/>

步骤3:实现权限请求和联系人获取逻辑

下面提供Kotlin和Java两种版本的代码,你可以根据自己的开发语言选择:

Kotlin版本示例

import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.coderconsole.cextracter.ContactExtractor
import com.coderconsole.cextracter.model.Contact

class MainActivity : AppCompatActivity() {
    private val READ_CONTACTS_REQUEST_CODE = 1001

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btnGetContacts = findViewById<Button>(R.id.btn_get_contacts)
        btnGetContacts.setOnClickListener {
            checkAndRequestContactsPermission()
        }
    }

    // 检查权限,未授予则发起请求
    private fun checkAndRequestContactsPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
            != PackageManager.PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.READ_CONTACTS),
                READ_CONTACTS_REQUEST_CODE
            )
        } else {
            // 权限已授予,直接获取联系人
            fetchContacts()
        }
    }

    // 处理权限请求结果
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == READ_CONTACTS_REQUEST_CODE) {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                fetchContacts()
            } else {
                Toast.makeText(this, "需要权限才能访问联系人", Toast.LENGTH_SHORT).show()
            }
        }
    }

    // 获取联系人并输出到日志/Toast
    private fun fetchContacts() {
        val contactExtractor = ContactExtractor(this)
        val contacts: List<Contact> = contactExtractor.extractContacts()

        // 输出联系人信息到Logcat
        contacts.forEachIndexed { index, contact ->
            Log.d("Contacts", "联系人${index+1}: 姓名=${contact.name}, 电话=${contact.phoneNumber}")
        }

        // 用Toast显示联系人总数(联系人太多时Toast显示不全,优先看Logcat)
        Toast.makeText(this, "共获取到${contacts.size}个联系人", Toast.LENGTH_LONG).show()
    }
}

Java版本示例

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.coderconsole.cextracter.ContactExtractor;
import com.coderconsole.cextracter.model.Contact;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private static final int READ_CONTACTS_REQUEST_CODE = 1001;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnGetContacts = findViewById(R.id.btn_get_contacts);
        btnGetContacts.setOnClickListener(v -> checkAndRequestContactsPermission());
    }

    private void checkAndRequestContactsPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    this,
                    new String[]{Manifest.permission.READ_CONTACTS},
                    READ_CONTACTS_REQUEST_CODE
            );
        } else {
            fetchContacts();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == READ_CONTACTS_REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                fetchContacts();
            } else {
                Toast.makeText(this, "需要权限才能访问联系人", Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void fetchContacts() {
        ContactExtractor contactExtractor = new ContactExtractor(this);
        List<Contact> contacts = contactExtractor.extractContacts();

        for (int i = 0; i < contacts.size(); i++) {
            Contact contact = contacts.get(i);
            Log.d("Contacts", "联系人" + (i+1) + ": 姓名=" + contact.getName() + ", 电话=" + contact.getPhoneNumber());
        }

        Toast.makeText(this, "共获取到" + contacts.size() + "个联系人", Toast.LENGTH_LONG).show();
    }
}

步骤4:测试运行

启动APP后点击按钮:

  • 首次打开会弹出权限请求对话框,点击「允许」;
  • 之后就能在Logcat中看到完整的联系人信息,同时Toast会提示联系人总数。

内容的提问来源于stack exchange,提问作者user2947950

火山引擎 最新活动