【问题标题】:How to enable 3G by a button - android如何通过按钮启用 3G - android
【发布时间】:2013-07-10 02:23:00
【问题描述】:

我搜索了一个looooooot,但没有找到我想要的。

我正在尝试制作一个用户可以通过按下每个按钮来打开和关闭的应用。

我发现了一些使用反射的代码(我将使用 android 2.3 及更高版本),但我不知道如何调整它以与按钮一起使用。

我搜索反射是如何工作的,我花了很多时间寻找其他方法来做到这一点,但是……任何人都为我工作。

最糟糕的问题是我发现的代码和示例没有使用异常(抛出或尝试捕获),所以我不知道如何使用它们。

这是我在此处找到的代码,但我不知道如何在按钮单击中使用它(或将其称为 true 或 false,以启用和禁用 3G/移动数据)。

有人可以帮助我吗?

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);
     }

链接到我找到此代码的位置: How can i turn off 3G/Data programmatically on Android?

【问题讨论】:

  • 请在哪里找到这段代码,谢谢。
  • 您的问题不是关于如何启用 3G ,而是为按钮分配功能。
  • 没错,我想修改此代码以使用按钮。

标签: java android button


【解决方案1】:

嗨!您只需在每个按钮的 onClickListener 中调用该函数,并让该函数在单独的线程中运行!

打开按钮:

btOn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Toast.makeText(MainActivity.this,"Trying to switch on 3G!",Toast.LENGTH_SHORT).show();

                (new Thread(new Runnable() {
                    @Override
                    public void run() {

                        setMobileDataEnabled(MainActivity.this,true);

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, "Switched ON 3G!", Toast.LENGTH_SHORT).show();
                            }
                        });

                    }
                })).start();
            }
        });

关闭按钮:

        btOff.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"Trying to switch off 3G!",Toast.LENGTH_SHORT).show();

                (new Thread(new Runnable() {
                    @Override
                    public void run() {

                        setMobileDataEnabled(MainActivity.this,false);

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, "Switched OFF 3G!", Toast.LENGTH_SHORT).show();
                            }
                        });


                    }
                })).start();



            }
        });

* 在函数中添加 try...catch 子句:

最终的 ConnectivityManager 骗子;

conman = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    final Class conmanClass;

    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) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    }

}

希望能回答你的问题!

【讨论】:

  • 这正是我想要的,完美运行,非常感谢你的帮助,我不敢相信我唯一需要做的是:setMobileDataEnabled(MainActivity.this, true/false) .感谢您的帮助(y)
猜你喜欢
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2013-07-09
  • 2013-09-21
  • 1970-01-01
  • 2011-09-04
相关资源
最近更新 更多