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

时间:2010-06-14 09:43:02

标签: android gprs

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

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

2 个答案:

答案 0 :(得分: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 activity会自动调用com.android.internal.telephony中的方法来立即切换数据状态。

如果您想将数据连接小部件或类似内容添加到您的rom,那么:

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

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

答案 1 :(得分:1)

你看过SE developer zone了吗?我发现它非常有用。