如何在android中关闭数据连接?

Posted

技术标签:

【中文标题】如何在android中关闭数据连接?【英文标题】:How can i turn off data connection in android? 【发布时间】:2013-08-05 14:26:13 【问题描述】:

我有一个可以关闭 wifi 的 BroadcastReceiver..同样我也想关闭数据连接..我该怎么做?这是代码

public static class LowBatteryReceiver extends BroadcastReceiver
        public void onReceive(Context context, Intent intent)
            wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
            wifiManager.setWifiEnabled(false);
            wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
            Toast.makeText(context, "Turning off wifi..", Toast.LENGTH_LONG).show();
        
    

谢谢

【问题讨论】:

【参考方案1】:

您必须使用此权限

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

在您的 AndroidManifest.xml 中

<receiver android:name=".LowBatteryReceiver">
    <intent-filter>
         <action android:name="android.intent.action.BATTERY_LOW" />
    </intent-filter>
</receiver>

还有你的 LowBatteryReceiver

/** FOR CLOSE WIFI **/

public static class LowBatteryReceiver extends BroadcastReceiver
    @Override
    public void onReceive(Context context, Intent intent)
        String intentAction = intent.getAction();
        if(intentAction.equals(Intent.ACTION_BATTERY_LOW))
            wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
            wifiManager.setWifiEnabled(false);
            Toast.makeText(context, "Turning off wifi..", Toast.LENGTH_LONG).show();
        
    


/** FOR CLOSE MOBILE DATA **/

public void onReceive(Context context, Intent intent)
        String intentAction = intent.getAction();
        if(intentAction.equals(Intent.ACTION_BATTERY_LOW))
            try 
            ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            Class<?> conmanClass = Class.forName(conman.getClass().getName());
            Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
            iConnectivityManagerField.setAccessible(true);
            Object iConnectivityManager = iConnectivityManagerField.get(conman);
            Class<?> iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
            Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
            setMobileDataEnabledMethod.setAccessible(true);
            setMobileDataEnabledMethod.invoke(iConnectivityManager, false);
             catch (Exception e) 
            e.printStackTrace();
            
        
    

【讨论】:

好吧,我想要的也是关闭 3g 数据连接。不只是 Wi-Fi..我该怎么做? 谢谢!!只有两个问题..是否可以在wifi连接的onReceive中插入移动数据代码?它要求我导入Field,但我不知道是哪个.. 用于导入归档:导入 java.lang.reflect.Field;我不明白你的第一个问题? 抱歉,现在没关系了..所以,现在在 BATTERY_LOW 上,数据连接会关闭,对吧? 好的,它成功了 :) 我尝试从 BATTERY_LOW 更改为 BOOT_COMPLETED 并且成功了 :) 谢谢!

以上是关于如何在android中关闭数据连接?的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.1 中关闭数据库连接

如何在 Amazon RDS 中关闭与 Postgres DB 的空闲连接

如何在 ZF3 应用程序的功能 PHPUnit 测试中关闭数据库连接并减少它们的数量?

在 Java 中关闭数据库连接

在 Java Swing 中关闭数据库连接

何时在 Nodejs 中关闭 MongoDB 数据库连接