2015-12-03 57 views
10

我試圖設置移動數據。但它只適用於SIM 1如何啓動手機互聯網設置對話框?

public static void setMobileData(Context context, boolean isEnabled) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { 

    ConnectivityManager conman = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
    @SuppressWarnings("rawtypes") 
    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()); 

    Class[] cArg = new Class[2]; 
    cArg[0] = String.class; 
    cArg[1] = Boolean.TYPE; 
    Method setMobileDataEnabledMethod; 

    setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", cArg); 

    Object[] pArg = new Object[2]; 
    pArg[0] = context.getPackageName(); 
    pArg[1] = isEnabled; 
    setMobileDataEnabledMethod.setAccessible(true); 
    setMobileDataEnabledMethod.invoke(iConnectivityManager, pArg); 
} 

public static void setMobileData2(Context context, boolean isEnabled) throws NoSuchMethodException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException, InvocationTargetException { 
    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, isEnabled); 
} 

public static boolean setMobileData3(Context context, boolean isEnable) { 
    boolean mobileDataAllowed = Settings.Secure.putInt(context.getContentResolver(), "mobile_data", isEnable?1:0); 
    return mobileDataAllowed; 
} 

但現在我只想啓動該默認移動選擇對話框。如果你有任何想法啓動該對話讓我知道..在此先感謝。

+1

您是否在詢問有關啓動「選擇數據的SIM卡」對話框? – ozbek

+1

是的,正好@ozbek – shobhan

+1

順便說一句,對於哪個版本的Android和你想實現這個目標的設備? – 7383

回答

3

僅在android lollipop 5.1以上版本中添加了多SIM卡支持。在此之前,不同的手機制造商都有自己的自定義實施方案來支持多SIM卡和相應的設置。因此,如果您的目標是通用解決方案,則無法實現。即使在5.1上,也沒有直接的意圖啓動這個特定的設置,但使用黑客可能實現,只要製造商應該只使用Google解決方案,否則它將無法工作。

+0

無論誰對我的答案贊成不滿,請提及相同的有效理由。 – 7383

3

你必須開始這樣的設置的意圖。

startActivityForResult(new Intent(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS), 0); 

「注意」 也有WIFI的設置,更.Explore它的很多你想要的。這樣

android.provider.Settings.ACTION_WIFI_SETTINGS 
+2

感謝您的回覆@Arslan。該意圖用於啓動「網絡設置」。但我想要的是直接啓動popUp來選擇SIM1,SIM2或OFF之間的移動數據。 – shobhan

+0

有了這個解決方案雙SIM卡設置對話框將永遠不會到來。 –

+0

網絡設置不同於用於數據選擇的雙模擬對話框 – 7383

1

我試圖打開Internet設置thriugh我的應用程序,但它是通過它打開互聯網只有默認的SIM卡即SIM卡1.You有重定向用戶到設置屏幕使用意圖

默認功能

Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); startActivity(intent);

+0

Wifi設置不同於用於數據選擇的雙重模擬對話框 – 7383

相關問題