gpt4 book ai didi

android - 如何基于 Google 的 Android 最新拨号器应用程序(或基于 Vanilla 的 ROM,如 Lineage OS)制作拨号器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:13:50 25 4
gpt4 key购买 nike

背景

从 Android M 开始,可以替换操作系统的拨号器应用程序,这意味着接听电话可以显示您自己的自定义 UI。

这是通过扩展 InCallService 来完成的类,并有一个处理拨号 Intent 的 Activity :

<service android:name="your.package.YourInCallServiceImplementation"
android:permission="android.permission.BIND_INCALL_SERVICE">
<meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
<meta-data android:name="android.telecom.IN_CALL_SERVICE_RINGING"
android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService"/>
</intent-filter>
</service>

<activity android:name="your.package.YourDialerActivity"
android:label="@string/yourDialerActivityLabel">
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

要请求成为默认拨号器,您可以使用:

private fun offerReplacingDefaultDialer() {
if (getSystemService(TelecomManager::class.java).defaultDialerPackage != packageName) {
startActivity( Intent(ACTION_CHANGE_DEFAULT_DIALER)
.putExtra(EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName))

}
}

问题

API 是如此之大,以至于很少有应用程序尝试过这样的事情,而当他们尝试这样做时,与内置的相比,他们只做了一个非常小的实现。甚至与谷歌的拨号器相比。

应该实现的功能示例,只需在通话期间查看拨号器的 UI:静音、键盘、扬声器、添加调用( session )、保持、各种状态、视频调用(?),...

我发现了什么

尝试制作我自己的解决方案,我找到了一个示例存储库 ( here - "simple-phone"),我自己创建了一个 ( here ) 分支,只是为了找出有多少东西我应该实现至少与 Google 提供的功能一样丰富的功能。

我也搜索过其他人之前是否克隆过 Dialer,但只发现了 2 个,而且它们是相当旧的 Dialer 版本(一个 here 没有通话期间的 UI,另一个here 有一些调用日志问题,并且有很多已弃用和禁止使用的东西),还有一些我已经停止考虑使用的错误。

所以我尝试克隆我发现的 Android 本身的项目,here .可悲的是,它有一个非常奇怪的文件夹结构,这让人无法理解应该用它做什么,甚至无法在 IDE 上导入它:

enter image description here

enter image description here

enter image description here

但不知何故,我发现的存储库具有不同的文件夹结构,这意味着他们知道应该以某种方式对其进行修改,或者从那时起它已经发生了变化。

我什至尝试从自定义 ROM 克隆拨号器应用程序(在 Github 上搜索,here),但遇到了类似的问题。

然而,开发人员设法以某种方式使其发挥作用。如果您从 ApkMirror 试用“Lineage OS Phone”应用程序,您很可能会正常工作,特别是如果您使用 v11而不是 v19 (v19 在 Pixel 2 上对我有效,但在 Note 8 上无效,但 v11 在两者上都有效)。

也有人说,Google 的拨号器现在可以在越来越多的设备上使用 (here),但出于某种原因,我看不到它适用于很多设备(在 Note 8 上测试过)。

这让我想起了 4 年前在 Eclipse IDE 时代我尝试克隆启动器并制作自己的启动器(创建存储库 here )时遇到的许多问题。这对我来说很奇怪,这和启动器一样难...

到目前为止,唯一对我有用的是使用其中一个示例存储库 (here),并对其进行工作 fork (here),但正如我所写的那样,它存在各种问题,例如因为无法处理调用日志,当我尝试更新它的 targetSdk 时,它有一些数据库问题(比如写的 here )。可能还有更多我没有注意到的问题。

更新:找到了另一个存储库,here ("Koler") ,这通常工作正常。不是 AOSP,但在某些情况下可以帮助理解事物的工作原理。

问题

  1. 如何克隆最新版本的 Dialer 应用程序并使用它?实现可构建项目的步骤是什么?

  2. 为什么要这么难?您提供的解决方案是否适用于 Android 内部的其他类型的应用程序(例如启动器)?

  3. 除了 Vanilla Android OS(意味着如果没有好的解决方案来使用它)之外,是否可以为不时更新的自定义 ROM 执行此操作,例如 Lineage OS?

最佳答案

如何克隆最新版本的拨号器应用程序并使用它?

你不能。基于 AOSP Dialer 的项目严重依赖 AOSP 构建系统、内部库和 API,这些在完整的 AOSP 上下文之外根本不可用。

实现可构建项目的步骤是什么?

在 Android Studio 中构建它不会走得太远,除非您投入大量工作来返工或删除阻止您将其迁移到 Gradle 构建系统的东西。

为什么要这么难?

默认情况下,它根本不打算在 AOSP 之外构建。 Google 工程师不在乎,他们有完整的 AOSP 结帐。自定义 ROM 开发人员通常也不在乎,他们中的大多数人也对修改后的源代码进行了完整检查。

您提供的解决方案是否适用于 Android 内部的其他类型的应用(例如启动器)?

使用 Android Studio 构建它的唯一解决方案是使用 Gradle(然后使用 Import,正如您已经发现的那样)。一些应用程序包含一个 build.gradle,您必须看看它是否有效。启动器(AOSP 中的 packages/apps/Launcher3,CM/LineageOS 中的 packages/apps/Trebuchet)提供了一个由谷歌(无论出于何种原因)制作的 build.gradle,用于在外部构建启动器。同样,您必须看看它是否有效。

除了 Vanilla Android OS 之外,是否可以为不时更新的自定义 ROM(如 Lineage OS)执行此操作?

如前所述,大多数自定义 ROM 开发人员都有完整的源代码 check out ,因此他们通常不关心使用 Gradle(或 Android Studio)。一些 LineageOS 应用程序(Jelly/Browser、Eleven/Music 和其他一些应用程序)获得了 Gradle 支持,允许贡献者在没有完整源代码 check out (可能是 70GB 或更多)的情况下测试更改,但这只发生在 LineageOS 自己的应用程序上,所以到目前为止,AOSP 还没有在上游使用任何东西。

关于android - 如何基于 Google 的 Android 最新拨号器应用程序(或基于 Vanilla 的 ROM,如 Lineage OS)制作拨号器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55757560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com