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