android12.0(S) 从SD卡导入vCard文件到通讯录 号码带“-“ 如何把横线去除

简介: android12.0(S) 从SD卡导入vCard文件到通讯录 号码带“-“ 如何把横线去除

问题现象


导入号码格式核心代码如下,其中参数 defaultFormattingType 设置为 FORMAT_NANP

最终得到号码为1-558-888-6666,参数设置为 FORMAT_JAPAN 则正常


        String source = "15588886666";
        //normal
        int defaultFormattingType = PhoneNumberUtils.FORMAT_JAPAN;
        //bug
//        int defaultFormattingType = PhoneNumberUtils.FORMAT_NANP;
        final SpannableStringBuilder text = new SpannableStringBuilder(source);
        PhoneNumberUtils.formatNumber(text, defaultFormattingType);
        String phone = text.toString();
        Log.d("Provision","phone="+phone);

解决办法


frameworks/opt/vcard/java/com/android/vcard/VCardUtils.java

    public static int getPhoneNumberFormat(final int vcardType) {
        if (VCardConfig.isJapaneseDevice(vcardType)) {
            return PhoneNumberUtils.FORMAT_JAPAN;
        } else {
            // return PhoneNumberUtils.FORMAT_NANP;//cczheng fix import phone with - bug
            return PhoneNumberUtils.FORMAT_JAPAN;
        }
    }

导入 vcf 联系人调用代码如下

  private void importVCard(){
    File file = new File("/sdcard/test.vcf");
        Uri uriProvider = FileProvider.getUriForFile(this, "xxxxx.fileprovider", file);
    //Uri uriFile = Uri.fromFile(file);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(uri, "text/x-vcard");
    startActivity(intent);
  }


可以看到实际上跳转系统界面去导入,经过查找发现跳转的目的地就是 Contacts 应用,如果安装了其它联系人应用比如谷歌 contact,

会弹框提示要选用那一个。高版本安卓系统,不能直接访问 sdcard 文件,传递 uri 也是无用的,若要不跳转 Contact 界面中再去手动选择

vcf 文件,则将 Contacts 改为 uid system 属性即可


packages\apps\Contacts\AndroidManifest.xml

        <!-- vCard related -->
        <activity
            android:name=".vcard.ImportVCardActivity"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:exported="true"
            android:theme="@style/BackgroundOnlyTheme">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <data android:mimeType="text/directory"/>
                <data android:mimeType="text/vcard"/>
                <data android:mimeType="text/x-vcard"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

具体流程如下


Contact

|

|----传递 vcf 文件 uri 至 ImportVCardActivity

|----解析构造 ImportRequest 后 VCardService 调用 handleImportRequest 处理

|----实际通过线程 ImportProcessor 调用 runInternal() 转至下方 vcard


vcard

|

|----VCardEntryConstructor onEntryStarted

|----VCardEntry addPhone

|----VCardUtils getPhoneNumberFormat

|----PhoneNumberUtilsPort formatNumber

目录
相关文章
|
5月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
5月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
456 19
|
5月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
1147 2
|
8月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
735 83
|
12月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
12月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
628 0
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
471 0
|
前端开发 Android开发 网络架构
Android基于PinnedSectionListView实现联系人通讯录
 《Android基于PinnedSectionListView实现联系人通讯录》 我在之前的文章中写过文章,介绍过PinnedSectionListView(文章地址链接: http://blog.csdn.net/zhangphil/article/details/47144125 )【文1】,也有一篇文章是关于Android通讯录联系人操作的基础知识(文章地址链接: http://blog.csdn.net/zhangphil/article/details/47250747 )【文2】。
808 0
|
14天前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
182 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
24天前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
89 6

热门文章

最新文章