在Android上以编程方式检测和更改数据连接(GPRS/UMTS)

lor*_*ova 5 android gprs

我知道遗憾的是,无法在vanilla Android上以编程方式检测和更改数据连接(GPRS/UMTS),常见的解决方法是编辑APN设置.这不是一个很好的解决方案.

但是在我的设备(Xperia X10)上,我在"数据漫游"附近有一个额外的设置,允许启用或禁用彩信和数据.我想这是索尼爱立信所做的个性化设置,甚至其他供应商也可能会这样.有没有办法访问此设置?

bro*_*oot 5

我没有SE手机,但我查看了它的系统转储和:

  • 在AOSP源中,com.android.internal.telephony接口中有两个内部方法:enableDataConnectivity()和disableDataConnectivity().该接口及其实现是系统的一部分.
  • com.android.phone.PhoneInterfaceManager中还有两个与上面相同名称的方法,它们是Phone.apk应用程序的一部分.这些方法只调用上面的/系统的.
  • 索尼修改了com.android.phone.PhoneInterfaceManager.enableDataConnectivity(),因此它对存储在sharedPreferences中的布尔值进行了额外的检查.如果它为false,则enableDataConnectivity()方法始终调用com.android.internal.telephony的disableDataConnectivity().
  • 当然,这个布尔值是通过首选项屏幕控制的:"彩信和数据".它存储在"com.android.phone_preferences"首选项容器中,pref键为:"data_service_key".此外,当您切换此复选框时,settings活动会自动调用com.android.internal.telephony中的方法来立即切换数据状态.

如果要将数据连接小部件或类似内容添加到rom,则:

  • 你需要root.
  • 您需要"android.uid.phone"sharedUserId才能访问上述设置.

我认为最好修改Phone.apk,因此它会捕获启用/禁用数据的特殊意图.它将设置data_service_key布尔值并从com.android.internal.telephony调用方法之一.这应该是非常容易的事情,然后你将能够非常容易地创建小部件,应用程序和其他东西 - 他们将使用这种特殊意图.