Android 4.0 4G切换

Jim*_*y D 5 android 4g

这是针对三星Galaxy Nexus的Verizon LTE版本.

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

我还没有尝试任何东西,因为Android开发不是我的强项.我正在寻找指导...示例,代码示例等我假设这应该是一个单行,但我的经验是,使用Android开发没有什么是它看起来那么简单.

任何帮助将不胜感激.

Tom*_*Tom 5

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";
Run Code Online (Sandbox Code Playgroud)

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

最后,如果您仍然感兴趣,请参阅com.android.phone.Settings以查看系统如何处理此切换.它相当精细,正如我所提到的那样,需要权限才能获得普通的Android应用程序.


小智 -1

http://developer.android.com/reference/android/provider/Settings.System.html

除了在 Activity.java 中编写代码之外,您可能还需要请求访问 AndroidManifest.xml 中这些设置的权限。所以这很烦人,但应该足够简单。