标签: android-dialer

在通话期间禁用接近传感器

我放下手机,看起来我的接近传感器不再可靠.它一直返回近处.问题是,在通话期间显示屏关闭,我将无法使用数字键盘输入别针或会议另一个电话,甚至断开呼叫.我在辅助功能设置中找到了电源按钮断开连接选项并立即使用它.

我试图创建一个应用程序,试图在收到一个电话时获得一个完整的唤醒锁,希望它能保持显示.

  • 创建一个广播接收器,当电话状态变为OFFHOOK时调用服务

  • 该服务获得一个完整的唤醒锁,只有当手机状态为IDLE时才会释放它.

但是,接近传感器会关闭显示屏.我使用isHeld()方法来确保获取锁.我使用了PowerManager的isScreenOn()方法,即使在通话期间屏幕关闭时它也返回true.我试图在一个循环中每两秒获取一次唤醒锁进行测试,但显示器仍然不会出现.

我正在使用Nexus 5 Android版本4.4.4

任何人都可以建议超越接近传感器的行为吗?根要求的选项也没关系.

谢谢!

android telephony telephonymanager proximitysensor android-dialer

30
推荐指数
5
解决办法
15万
查看次数

Android系统.从拨号器启动应用程序

这是我到目前为止,但是当我在拨号器中输入这个组合时没有任何反应

public class DialReceiver extends BroadcastReceiver
{
    @Override
  public void onReceive(Context context, final Intent intent) {

    if (intent.getAction().equals(android.content.Intent.ACTION_NEW_OUTGOING_CALL)) {
        String phoneNumber = intent.getExtras().getString( android.content.Intent.EXTRA_PHONE_NUMBER );

        if(phoneNumber.equals("*#588637#")) { 
            Intent intent1 = new Intent(context , Activity.class);
            intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
            context.startActivity(intent1);
        }

    }

}
}
Run Code Online (Sandbox Code Playgroud)

并在androidmanifest

    <receiver
        android:name=".receiver.DialReceiver"
        android:exported="true"
        android:process=":background"
        tools:ignore="ExportedReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

java android broadcastreceiver android-dialer

7
推荐指数
1
解决办法
3890
查看次数

Android:PhoneLookup的目录数据提供程序

我正在编写一个自定义的Android联系人目录,已经实现了ContactsContract.Directory提供程序,并且可以在电话应用程序中进行搜索。

我现在面临的问题是,当我有打入/打出电话时,Android拨号程序不会查询我注册的自定义目录。是否可以通过PhoneLookup或其他方式参与来电显示解析?

作为一种可能的解决方法,我尝试使用BroadcastReceiver实现呼出/呼入呼叫拦截器,但是我看不到将联系数据返回到拨号器的方法。我发现用于显示数据的唯一选项是将透明活动覆盖在本机拨号程序上。有没有一种方法可以将联系方式返回给发送广播的拨号程序?还有其他可以尝试的想法吗?

PS。Google使用了我正在尝试为附近地点的目录列表和Google来电显示提供的功能。

PPS。通过阅读PhoneLookup的ContactsContract实现,我偶然发现了公司联系人目录,该目录可以附加到用户配置文件的默认目录中,根据应为PhoneLookup查询的代码,所以我将在星期一尝试使用它。

android android-contacts android-dialer

6
推荐指数
0
解决办法
380
查看次数

有没有办法直接从桌面浏览器发送电话号码到拨号器?

目前,我必须手动拨号,有时会导致拼写错误,所以我想知道,如果我可以突出显示我的chrome中的数字并将数字直接发送到我的android拨号器那将是很棒的.

android google-chrome phone-number android-dialer

6
推荐指数
1
解决办法
683
查看次数

“电话”应用程序如何显示通讯录中未包含的联系人信息?

背景

在Google 的“ 电话 ”应用中,有一个“来电显示和垃圾邮件”选项:

在此处输入图片说明

因此,如果您收到了不在通讯录上的某个人或某个组织的呼叫,但以某种方式被识别,则将为其命名,例如(称为“ + 972-035283487”):

在此处输入图片说明

自从Android的M(6.0 - API 23),应用程序可以替换默认的手机应用程序,然后还提供了替代的UI,当你呼叫某人或接到一个电话,通过扩展InCallService类,证明这里是基于

问题

我想尝试显示与“电话”应用程序上相同的信息,这意味着该人员/公司的名称(以防万一它可以识别出该名称)(并且不在通讯录上)。

我尝试过的

我试图分析通过拨号器的API获得的各种信息,但失败了:

  1. android.telecom.Call类的各个字段和功能

  2. getDetails Call类的里面,所以我就先里面有什么在那里,也有statusHints和“ 标签 ”内“ statusHints ”。这些都没有任何信息(返回null)。我尝试查看“ statusHints”的原因是因为这就是我在docs上看到的内容:

包含在通话界面中显示的状态标签和图标。

  1. 在“电话”应用程序上,按“了解更多信息”会转到一个网站(此处),该网站充满了我认为可能是数据来源的链接,但我认为应用程序本身并未使用此链接。相反,我认为它使用了Google的某种东西。

问题

  1. 是否可以获取此CallerId信息?如果是这样,怎么办?

  2. 电话应用程序如何做到这一点?它应该是开源的,所以必须有一些东西可以提供此信息,对吗?克隆它会以某种方式获得此信息吗?也许Google拥有自己的CallerID服务?

  3. 什么是“ callDetails”和“ statusHints”?他们提供什么?

android android-dialer caller-id

6
推荐指数
1
解决办法
920
查看次数

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

背景

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

这是通过扩展InCallService类并具有一个处理拨号意图的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>
Run Code Online (Sandbox Code Playgroud)

并要求成为默认拨号程序,可以使用:

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

    }
}
Run Code Online (Sandbox Code Playgroud)

问题

该API是如此之大,以至于很少有应用程序尝试过这样的事情,而与内置API相比,它们做了一个很小的实现。甚至比起Google的拨号器。

通过在通话过程中仅查看拨号器的UI即可实现的功能示例:静音,键盘,扬声器,添加通话(会议),保持,各种状态,视频通话(?),...

我发现了什么

为了制定自己的解决方案,我找到了一个示例存储库(此处为 “ simple-phone”),该存储库是我自己创建的(此处)分叉的,只是为了找出我应该实现多少东西才能制作出一些东西至少与Google提供的功能一样丰富。

我还搜索了其他用户是否曾经克隆过Dialer,但仅发现了2个,它们是Dialer的较旧版本(此处一个不具有通话中UI的版本,另一个此处存在一些问题带有调用日志,并且有很多已弃用和禁止使用的东西),还有一些我已停止考虑甚至使用的错误。

因此,我试图在此处克隆我发现的Android本身的项目。遗憾的是,它的文件夹结构很奇怪,无法理解应该怎么做以及如何在IDE中导入它:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

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

我甚至试图从自定义光盘克隆拨号应用程序(搜索Github上,在这里),却得到了类似的问题。

但是开发人员设法以某种方式使它起作用。如果您尝试使用ApkMirror的“ Lineage OS Phone”应用程序,则很有可能会正常运行,尤其是如果您使用v11而不是v19(v19在Pixel …

android gradle android-source android-dialer

6
推荐指数
1
解决办法
890
查看次数

是否可以在通话期间以编程方式拨打号码?

我知道在 Android 中可以制作拨号程序,

但是是否有可能在通话过程中让拨号器“按 1”?(比如当你打电话给支持时,你必须按各种数字才能与人交谈)有没有如何做到这一点的代码?

android android-dialer

5
推荐指数
1
解决办法
1975
查看次数

Android Intent ACTION_CALL没有拨打电话

在我的Android应用程序中,我想在用户单击按钮时自动拨打电话.我使用下面的代码集来实现这个功能

Intent intent = new Intent(Intent.ACTION_CALL);
                intent.setData(Uri.parse("tel:911"));
                startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

在我的AndroidManifest.xml我也添加了这个 <uses-permission android:name="android.permission.CALL_PHONE" />权限.

但它只是用给定的911号码打开拨号盘,而不是拨打电话.

android action android-intent android-dialer

5
推荐指数
1
解决办法
1万
查看次数

Android:如何制作默认拨号应用程序?

今天我的应用Facetocall 被谷歌拒绝了

  • 您的应用程序似乎不会在请求策略要求的相关权限之前提示用户成为默认处理程序。请进行必要的更改以符合政策要求,并通过声明表重新提交您的应用。

  • 您的声明表单中列出了默认处理程序功能,但您的应用程序没有默认处理程序功能。

我的目标是制作一个默认的拨号应用程序。

这是我的清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.gazman.beep"
    android:installLocation="preferExternal">

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.READ_CALL_LOG" />
    <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    ... and other permissions

    <application
        android:name=".application.BeepApp"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        tools:ignore="GoogleAppIndexingWarning">

        <activity
            android:name=".system_intents.IntentsActivity"
            android:launchMode="singleTask"
            android:noHistory="true"
            android:theme="@style/Theme.Transparent">
            <intent-filter>
                <action android:name="android.intent.action.DIAL" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.DIAL" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="tel" />
            </intent-filter>
        </activity>

        <activity
            android:name=".call.CallActivity"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:showForAllUsers="true" />

        <service
            android:name="com.gazman.beep.call.MyInCallService"
            android:permission="android.permission.BIND_INCALL_SERVICE">
            <meta-data
                android:name="android.telecom.IN_CALL_SERVICE_UI"
                android:value="true" />
            <intent-filter> …
Run Code Online (Sandbox Code Playgroud)

android android-dialer

5
推荐指数
1
解决办法
6587
查看次数

TelecomManager.ACTION_CHANGE_DEFAULT_DIALER 在华为 P8 Lite 上返回 RESULT_CANCELED

我想更改 Android 默认拨号器并想制作我自己的自定义拨号器。为此,我选择了这个 GIthub 存储库作为启动项目。这在所有其他手机上运行良好,在 huawei p8 lite 上停止运行。默认弹出消息不会显示将应用程序设置为默认值。这是代码块

private fun checkDefaultDialer() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return

    val telecomManager = getSystemService(TELECOM_SERVICE) as TelecomManager
    val isAlreadyDefaultDialer = packageName == telecomManager.defaultDialerPackage
    if (isAlreadyDefaultDialer) return

    val intent = Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER).putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName)
    startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER)
}

private fun checkSetDefaultDialerResult(resultCode: Int) {
    val message = when (resultCode) {
        RESULT_OK -> "User accepted request to become default dialer"
        RESULT_CANCELED -> "User declined request to become default dialer"
        else -> "Unexpected result code $resultCode"
    }
    Toast.makeText(this, message, …
Run Code Online (Sandbox Code Playgroud)

android default kotlin android-dialer

4
推荐指数
2
解决办法
1656
查看次数

Android 获取拨号器包名

我需要获取发布有关未接来电的通知的应用程序的包名称。据我了解,它制作了设备的拨号器应用程序。我可以从 API 19 获取设备上拨号器应用程序的包名称吗?

android android-dialer

2
推荐指数
1
解决办法
7180
查看次数