gpt4 book ai didi

android - 如何以编程方式在 Android 上隐藏来电显示

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

在 Android 手机上,在通话 -> 其他设置 -> 来电显示下

可以隐藏您的来电显示。我想通过我的代码以编程方式执行此操作,但无法找到执行此操作的方法。

我搜索了一下

android.providerandroid.电话

对于 2.1 版本,找不到它。

有人成功解决过这个问题吗?

提前致谢。最好的问候。

最佳答案

在这里我将描述我尝试过的两种方法。

1.) 可以从您的应用程序显示附加调用设置屏幕。尽管它看起来像是“设置”应用程序的一部分,但事实并非如此。此 Activity 是 native 电话应用程序的一部分,可以通过以下 Intent 接近它:

Intent additionalCallSettingsIntent = new Intent("android.intent.action.MAIN");
ComponentName distantActivity = new ComponentName("com.android.phone", "com.android.phone.GsmUmtsAdditionalCallOptions");
additionalCallSettingsIntent.setComponent(distantActivity);
startActivity(additionalCallSettingsIntent);

然后用户必须手动按下 CallerID 首选项并获得带有 3 个选项的单选按钮。

这其实不是我问这个问题的目的。我想避免用户必须选择任何其他选项的步骤。

2.) 当在 native 电话应用程序中执行 1.) 下描述的方法时,com.android.internal.telephony.Phone 中的函数 setOutgoingCallerIdDisplay() 具有被使用过。这是下一个方法的基础:在此类上使用 Java 反射并尝试使用适当的参数调用该函数:

try 
{
Class <?> phoneFactoryClass = Class.forName("com.android.internal.telephony.PhoneFactory");

try
{
Method getDefaultPhoneMethod = phoneFactoryClass.getDeclaredMethod("getDefaultPhone");
Method makeDefaultPhoneMethod = phoneFactoryClass.getMethod("makeDefaultPhone" , Context.class);

try
{
makeDefaultPhoneMethod.invoke(null, this);
Object defaultPhone = getDefaultPhoneMethod.invoke(null);

Class <?> phoneInterface = Class.forName("com.android.internal.telephony.Phone");
Method getPhoneServiceMethod = phoneInterface.getMethod("setOutgoingCallerIdDisplay", int.class, Message.class);

getPhoneServiceMethod.invoke(defaultPhone, 1, null);
}
catch (InvocationTargetException ex)
{
ex.printStackTrace();
}
catch (IllegalAccessException ex)
{
ex.printStackTrace();
}
}
catch (NoSuchMethodException ex)
{
ex.printStackTrace();
}
}
catch (ClassNotFoundException ex)
{
ex.printStackTrace();
}

首先我尝试只使用 getDefaultPhone(),但我得到了 RuntimeException

“必须从 Looper 线程调用 PhoneFactory.getDefaultPhone”

显然,问题在于我试图从消息循环中调用此方法,而该消息循环不是 native 电话应用程序。

试图通过制作自己的默认电话来避免这种情况,但这是一种安全违规行为:

错误/AndroidRuntime(2338): java.lang.SecurityException: Permission Denial: 不允许从 pid=2338, uid=10048 发送广播 android.provider.Telephony.SPN_STRINGS_UPDATED

克服(这两个)问题的唯一方法是使用与核心系统应用程序相同的 key 对您的应用程序进行签名,如下所述

Run secure API calls as root, android

关于android - 如何以编程方式在 Android 上隐藏来电显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3510856/

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