我想以编程方式从我的活动中隐藏/显示我的来电显示。我试图在 android 文档中找到它,但没有运气。也许你有什么想法?
5 回答
我在 Android Google 群组上发布了一个问题,但完全没有得到任何答案。我还看到了关于 SO 的其他几个问题,也没有答案(或没有答案)。
我得出的结论是,这根本不可能。我的推理是这样的...
如果我转到“设置”->“呼叫”->“附加设置”,我会看到一个 AlertDialog,其 HeaderTitle 为“呼叫设置”,并且我看到一个循环进度指示器和一条消息“正在读取设置...”。
我突然想到,那时我的手机正在访问我的手机/网络提供商。生成的“选择器”对话框为我提供了“网络默认值”、“隐藏号码”和“显示号码”选项,当我进行选择时(或者即使我只是“取消”对话框),我会得到另一个带有循环进度的 AlertDialog带有消息“更新设置...”的指示器。
简而言之,呼叫者 ID 设置似乎并不完全是手机设置的“本地”设置,而是依赖于与提供商的交互,并且无论出于何种原因,Android API 都不允许以编程方式对其进行操作。
我不确定这是否在未来版本的 Android 的“待办事项”列表中,或者是否存在允许这样做或其他原因的法律/安全影响。无论如何,到目前为止,我还没有找到任何人能够解释为什么 TelephonyManager (例如)没有一种方法可以简单地切换它。
编辑:使用标准 API 获得 Additional Settings AlertDialog 也不走运。
我这么说的原因是可以调出设备“设置”的各个部分,例如,在我的一个应用程序中,我在传递给 startActivity() 的 Intent 的构造函数中使用了 android.provider.Settings.ACTION_WIRELESS_SETTINGS。这将打开用于启用/禁用 wi-fi、移动互联网和蓝牙的设置页面。
android.provider.Settings 对其他设置页面还有其他类似的操作,但甚至没有一个用于“呼叫”的操作,更不用说呼叫-> 附加设置,AlertDialog 也没有任何内容可以让您选择隐藏/显示传出的来电显示。
如果可以做到这一点,那么它必须是一个未记录的 API,除非我完全错过了它(我花了很长时间寻找)。我怀疑检查 Android 源代码可能是找到答案的唯一方法,我还没有尝试过。
我设法获得了附加呼叫设置对话框。解释如下:
虽然它看起来像是设置的一部分,但实际上它是 Native PhoneApp 的一部分。如果您查看 PhoneApp 的 AndroidManifest.xml,您会看到 Activity GsmUmtsAdditionalCallOptions 已为 android.intent.action.MAIN 定义了 IntentFilter。
因此,我检查的代码可以在多部手机上正常工作:
Intent additionalCallSettingsIntent = new Intent("android.intent.action.MAIN");
ComponentName distantActivity = new ComponentName("com.android.phone", "com.android.phone.GsmUmtsAdditionalCallOptions");
additionalCallSettingsIntent.setComponent(distantActivity);
startActivity(additionalCallSettingsIntent);
如果#31# 技巧适用于您对单个呼叫的需求,那么您可以添加一个广播接收器,用于侦听拨出呼叫通知并在开始拨号之前修改号码以包含#31#。Android允许像这样在途中更改号码。
仅当您的默认设置是启用呼叫者 ID 并且您的网络支持 #31# 并且您想使用小部件将其关闭时才有效,例如。
来电显示是特定于网络的,不是电话控制的。事实上,在某些移动网络配置中,手机甚至不“知道”自己的电话号码。
某些网络支持发送激活/停用来电显示网络命令。在 GSM 中,这通常是#31#。它可以是永久性的,也可以是基于每次调用的。
- 永久请求网络隐藏所有呼叫的呼叫者 ID。
- 每个呼叫请求网络仅隐藏该呼叫的呼叫者 ID。后者是通过在被呼叫的号码前加上#31# 来实现的,因此例如调用#31#85432786426 将调用85432786426 隐藏呼叫者。
有些网络同时支持,有些只支持其中之一,有些则不启用。试试你的运气,并尝试在拨打的号码前加上#31#,看看它是否有效。
http://www.gsm-security.net/faq/gsm-caller-id-clip-clir.shtml
如果您想要其他通话设置的快捷方式,您可以使用App Cut
并选择 GSM 设置。它将在您的主屏幕上放置一个快捷方式。