gpt4 book ai didi

Android 4.0 4G 切换

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

这适用于三星 Galaxy Nexus 的 Verizon LTE 版本。

我的任务是编写一个可以有效禁用/启用 4G 功能的微型应用程序。这可以通过 settings > mobile network > network mode 并选择 LTE/CDMA(启用 4g)或 CDMA(仅 3g)来手动完成.

我还没有尝试过任何东西,因为 Android 开发不是我的强项。我正在寻找指导...示例、代码示例等。我假设这应该几乎是单行的,但根据我的经验,Android 开发没有看起来那么简单.

任何帮助将不胜感激。

最佳答案

Settings.Secure 中有偏好从 SDK 中隐藏的类:

    /**
* The preferred network mode 7 = Global
* 6 = EvDo only
* 5 = CDMA w/o EvDo
* 4 = CDMA / EvDo auto
* 3 = GSM / WCDMA auto
* 2 = WCDMA only
* 1 = GSM only
* 0 = GSM / WCDMA preferred
* @hide
*/
public static final String PREFERRED_NETWORK_MODE =
"preferred_network_mode";

您可以对此使用反射,或者只是将常量本地化到您的项目中。这样做的问题是您无法更改此设置的值(与所有安全设置一样),您只能读取它。上述值并不是唯一可能的值,实际上还有一些位于 com.android.internal.telephony.RILConstants 中,这对 SDK 也是隐藏的,需要反射才能访问。

TelephonyManager中还有一个隐藏方法, 但同样它是只读的,没有其他方法可以设置这个常量。这会准确地告诉您您想知道的内容,设备是设置为“LTE/CDMA”(LTE_ON_CDMA_TRUE) 还是“仅 CDMA”(LTE_ON_CDMA_FALSE):

/**
* Return if the current radio is LTE on CDMA. This
* is a tri-state return value as for a period of time
* the mode may be unknown.
*
* @return {@link Phone#LTE_ON_CDMA_UNKNOWN}, {@link Phone#LTE_ON_CDMA_FALSE}
* or {@link Phone#LTE_ON_CDMA_TRUE}
*
* @hide
*/
public int getLteOnCdmaMode() {
try {
return getITelephony().getLteOnCdmaMode();
} catch (RemoteException ex) {
// Assume no ICC card if remote exception which shouldn't happen
return Phone.LTE_ON_CDMA_UNKNOWN;
} catch (NullPointerException ex) {
// This could happen before phone restarts due to crashing
return Phone.LTE_ON_CDMA_UNKNOWN;
}
}

根据我的研究,如果没有 root 访问权限并从命令行使用 setprop 之类的东西,您将无法创建这样的应用程序,但即使这样,您也可能需要重新启动整个 Telephony 进程才能进行此设置生效。

最后,如果您仍然感兴趣,请参阅 com.android.phone.Settings 以了解系统如何处理此切换。它相当复杂,正如我所提到的,它需要普通 Android 应用程序不会授予的权限。

关于Android 4.0 4G 切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607263/

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