2014-06-26 32 views
4

我正在開發一個應用程序,我很擔心,以數據的用戶可以彼此之間轉賬的金額。由於某些用戶的移動數據計劃有限,有些用戶不這樣做,所以我想知道是否可以開發一款用於禁用我的特定應用的移動數據的交換機。 有點像Android自己的數據使用 - >移動 - >應用程序 - >「限制後臺數據」的確如此...如何禁用移動數據編程我的應用程序只

它說(而且)它「禁用移動數據網絡上的背景數據。Wi- Fi將被使用,如果可用的話。「,我想要的,但不只是在背景。

我知道我無法更改「限制背景數據」選項,因爲如果應用程序可能會解開它,它會變得無用......但有沒有一種方法可以通過編程方式說現在我的應用程序被阻止訪問到移動數據,現在不是?

爲了解我爲什麼要這樣做,我試圖在用戶選擇給定的選項(我所做的和正常工作)時不要調用遠程訪問調用,但是有一些數據泄漏(每天一些kbs)不能似乎阻止......或者由於系統保持HTTP連接或其它某些模糊的原因...

我看到在DDMS角度來看,這些數據傳輸上月食我的應用程序的網絡統計信息。

感謝所有幫助

回答

0

下面的代碼禁用或啓用手機類數據: -

Java代碼

private void setMobileDataEnabled(Context context, boolean enabled) { 
    final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    final Class conmanClass = Class.forName(conman.getClass().getName()); 
    final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 
    iConnectivityManagerField.setAccessible(true); 
    final Object iConnectivityManager = iConnectivityManagerField.get(conman); 
    final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); 
    final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
    setMobileDataEnabledMethod.setAccessible(true); 

    setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled); 
} 

清單

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 
+0

非常有趣,非常感謝! 然而這禁用/啓用所有應用程序的設備的移動數據...,而不是在我的應用程序只有有針對性的,因爲我想要做... – Marc

+2

@Marc當您關閉應用程序,然後啓用簡單(它關閉所有應用程序)。 – duggu

+0

我的應用程序也運行在後臺,而無論哪種方式,我不希望,而我的應用程序是活躍:( – Marc

1

而不是禁用,這將是很好的檢查,如果活動連接是否是WiFi,如果沒有WiFi,則不做任何服務器端通信。

低於線程檢查爲例。

How do I see if Wi-Fi is connected on Android?

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

if (mWifi.isConnected()) { 
    // Do whatever 
} 

記得

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 

添加到您的AndroidManifest.manifest這個工作。

+0

謝謝,我已經做這樣的事情, 當無線連接或移動數據連接,而不是在限制模式,我不與服務器通信,我認爲這是「未連接到互聯網狀態」,這減少了數據使用可能幾兆字節(取決於使用)每天幾千字節...但仍然有這些kb打擾我...因爲我不能稱這個開關爲「限制移動數據」或「僅限Wi-Fi」模式。我在跳槽,可能有辦法強制我的應用程序(也在後臺運行)不使用任何移動數據。 – Marc

+0

您是否在您的項目中使用任何需要互聯網的第三方庫,然後很難限制它們。但是如果從你的應用程序使用互聯網,那麼當設備連接到網絡,並且如果網絡不是無線網絡時,它肯定會起作用,認爲它沒有連通性。 –

+0

我確實使用Facebook sdk和谷歌播放服務... – Marc

相關問題