java - Android 使用代码打开/关闭移动数据

标签 java android mobile

我正在尝试解决一个问题,在该问题中我必须先禁用然后再启用移动数据,两者之间有一些延迟(重置移动数据 2G)。

第 1 步:禁用移动数据

第 2 步:等到移动数据被禁用

第 3 步:延迟 2 秒

第四步:启用移动数据

第 5 步:WAITING移动数据启用

第 6 步:继续程序......

做一些研究我想到了这个......

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button start = (Button)findViewById(R.id.button1);
        start.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                    if(!mobileDataEnabled(getApplicationContext())){
                    setMobileDataEnabled(getApplicationContext(),true);
                    Toast.makeText(getApplicationContext(), "ENABLED", Toast.LENGTH_SHORT).show();
                    }else{
                    setMobileDataEnabled(getApplicationContext(),false);
                    Toast.makeText(getApplicationContext(), "DISABLED", Toast.LENGTH_SHORT).show();
                    }

            }
        });
    }

//the method below enables/disables mobile data depending on the Boolean 'enabled' parameter.
private void setMobileDataEnabled(Context context, boolean enabled) {
        final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        Class conmanClass = null;
        try {
            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);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
// below method returns true if mobile data is on and vice versa
 private boolean mobileDataEnabled(Context context){
        boolean mobileDataEnabled = false; // Assume disabled
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        try {
            Class cmClass = Class.forName(cm.getClass().getName());
            Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
            method.setAccessible(true); // Make the method callable
            // get the setting for "mobile data"
            mobileDataEnabled = (Boolean)method.invoke(cm);
        } catch (Exception e) {
            // Some problem accessible private API
            // TODO do whatever error handling you want here
        }
        return mobileDataEnabled;
    }

上面的代码将打开/关闭移动数据,但它发生得非常快。如此之快,移动数据实际上什至没有关闭。如何在两者之间添加延迟并实现我上面提到的步骤?任何帮助,将不胜感激。 谢谢!

最佳答案

随便放

Thread.sleep(1000);

在代码语句之间(在 setMobileData API 之前)实现延迟。延迟参数以毫秒为单位。因此,请根据您的要求进行更改。

编辑:尝试使用以下代码将延迟放入处理程序中:

new Handler().postDelayed(new Runnable() {
@Override
public void run() {
   //Whatever you want to do
    }
}, 1000);

关于java - Android 使用代码打开/关闭移动数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23100298/

相关文章:

java - 将喜欢的方法添加到 IntelliJ 中的静态导入?

java.lang.IllegalArgumentException : Unable to PTableType enum for value of 'MATERIALIZED VIEW' Exception with Phoenix and Hbase 异常

java - 清除 tomcat 7 中 web 应用程序的所有 session

Android:打开文件夹对话框

java - 是否有用于 Java 的 HttpCahce 客户端库?

android - 如何从 react-native 代码调用 C 函数?

java - 无法在 Android 模拟器上 root

java - 将 TextView 链接到 Android 按钮

css - 如何使您的 css 断点在移动设备上工作? (已使用视口(viewport)元标记)

audio - Corona SDK:要在音频结束时更改场景。 (不起作用)