Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓4.0 4G切换_Android_4g - Fatal编程技术网

Android 安卓4.0 4G切换

Android 安卓4.0 4G切换,android,4g,Android,4g,这是针对三星Galaxy Nexus的Verizon LTE版本 我的任务是编写一个能够有效禁用/启用4G功能的微型应用程序。这可以通过设置>移动网络>网络模式并选择LTE/CDMA(启用4g)或CDMA(仅限3g)手动完成 我还没有尝试过任何东西,因为Android开发不是我的强项。我正在寻找指导。。。示例、代码示例等。我假设这应该是一行代码,但根据我的经验,在Android开发中,没有什么事情像看上去那么简单 任何帮助都将不胜感激。 除了在Activity.java中编写代码外,您可能还需要

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

我的任务是编写一个能够有效禁用/启用4G功能的微型应用程序。这可以通过
设置>移动网络>网络模式
并选择
LTE/CDMA
(启用4g)或
CDMA
(仅限3g)手动完成

我还没有尝试过任何东西,因为Android开发不是我的强项。我正在寻找指导。。。示例、代码示例等。我假设这应该是一行代码,但根据我的经验,在Android开发中,没有什么事情像看上去那么简单

任何帮助都将不胜感激。


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

在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.rilstants中,它同样对SDK隐藏,需要反射才能访问

中还有另一个隐藏方法,但它也是只读的,没有其他方法可以设置此常量。这将准确地告诉您想要知道的内容,无论设备设置为“LTE/CDMA”(LTE\u ON\u CDMA\u TRUE)还是“仅CDMA”(LTE\u ON\u CDMA\u FALSE):

根据我的研究,如果没有root访问权限,并且在命令行中使用类似于
setprop
的东西,您无法创建这样的应用程序,但即使这样,您也可能需要重新启动整个电话过程,以便此设置生效


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

我也有兴趣更改设置,仅WCDMA,WCDMA/LTE

我找到了更改设置的方法。使用root权限安全。*,如下所示

    new ExecuteAsRootBase() {
        @Override
        protected ArrayList<String> getCommandsToExecute() {
            ArrayList<String> cmds = new ArrayList<String>();
            cmds.add("su -c 'chmod 755 "+mySqlite+"'");
            cmds.add("echo \"UPDATE secure SET value='"+ value +"' WHERE name='"+ key +"'; \" | "+mySqlite+" /data/data/com.android.providers.settings/databases/settings.db");
            //TODO: SQL injection can be done!!!
            return cmds;
        }
    }.execute();
newexecuteasrootbase(){
@凌驾
受保护的ArrayList getCommandsToExecute(){
ArrayList cmds=新建ArrayList();
添加(“su-c'chmod 755”+mySqlite+”);
cmds.add(“echo\”UPDATE secure SET value='“+value+”,其中name='“+key+”;\“\124;”+mySqlite+”/data/data/com.android.providers.settings/databases/settings.db”);
//TODO:可以进行SQL注入!!!
返回CMD;
}
}.execute();
引入了ExecuteAsRootBase,mySqlite是“/data/data/”+context.getPackageName()+”/files/sqlite3”,其中预先放置了sqlite3

但是,在设置Settings.secure.PREFERRED\u网络模式后,我们似乎必须调用com.android.internal.telephony.Phone.设置PreferredNetworkType()进行切换(仅限WCDMA CDMA/LTE)。
我的手机(偶数设置Settings.secure.PREFERRED_NETWORK_MODE=2)连接到LTE网络…

所有其他答案都正确,这需要访问Settings.secure。看看手机应用程序如何处理此设置

或者查看
切换2G
应用程序源:

AFAIK,普通的Android SDK应用程序无法改变这一点。啊,非常有趣。我希望不是这样。现在正在研究。我听说HTC手机上有一个小部件,这让我相信它是可以实现的。如果有问题的应用程序小部件与HTC手机一起提供,那不是一个普通的Android SDK应用程序。@commonware,正确。然而,我的观点只是说这是可以通过编程实现的。SixHouse,你有没有找到一个简单的方法来实现这一点?我正在寻找同样的,像你一样,假设这将是一个单一的班轮。有什么帮助吗?
    new ExecuteAsRootBase() {
        @Override
        protected ArrayList<String> getCommandsToExecute() {
            ArrayList<String> cmds = new ArrayList<String>();
            cmds.add("su -c 'chmod 755 "+mySqlite+"'");
            cmds.add("echo \"UPDATE secure SET value='"+ value +"' WHERE name='"+ key +"'; \" | "+mySqlite+" /data/data/com.android.providers.settings/databases/settings.db");
            //TODO: SQL injection can be done!!!
            return cmds;
        }
    }.execute();