Włączanie data connection w Androidzie

0

próbuje uruchomić ten kod

http://stackoverflow.com/questions/11555366/enable-disable-data-connection-in-android-programmatically

zanim go przerobię na swoje potrzeby chciałabym zobaczyć czy działa ale ciągle w Android Studio na czerwono jest context. CO JEST NIE TAK?

private void setMobileDataEnabled(Context context, boolean enabled) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    final ConnectivityManager conman = (ConnectivityManager)  context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final Class conmanClass = Class.forName(conman.getClass().getName());
    final Field connectivityManagerField = conmanClass.getDeclaredField("mService");
    connectivityManagerField.setAccessible(true);
    final Object connectivityManager = connectivityManagerField.get(conman);
    final Class connectivityManagerClass =  Class.forName(connectivityManager.getClass().getName());
    final Method setMobileDataEnabledMethod = connectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
    setMobileDataEnabledMethod.setAccessible(true);

    setMobileDataEnabledMethod.invoke(connectivityManager, enabled);
}
0

A skąd wywołujesz tę metodę?

0

sprawdzam czy data connection jest włączona

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

String dataConnectionStatus = String.valueOf(mobileInfo.getState());

if (dataConnectionStatus == "DISCONNECTED") {

jesli wylaczona to wlacz ...

}

0

No dobrze, ale Twoim contextem może być Activity, Service, BroadcastReceiver. Możesz to wywoływać w jakimś onClickListener'ze. To o co pytałem jest ważną informacją.

0

public void onClick(View v) {

}

0

No to w takim razie Twój context musisz pobrać za pomocą

getApplicationContext()

(i to przekazujesz jako parametr to metody)

0

przepraszam a troche jaśniej?

0
setMobileDataEnabled(getApplicationContext(), true);
0

są dwie opcje albo sobie dam spokój i może zajmę się gotowaniem, sprzątaniem, prasowaniem

ewentualnie jeśli Ci się chce rzucić na to okiem wyjaśnić mi to to poproszę i napisać co źle robię. Do momentu wyświetlanai statusu działa.

package com.example.bs.myapplication;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        final TextView text = (TextView) findViewById(R.id.ukrytyTekst);

        Button manageVisibilityOfText = (Button) findViewById(R.id.guzik);

        manageVisibilityOfText.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                text.setVisibility(View.VISIBLE);

                ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

                NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

                String dataConnectionStatus = String.valueOf(mobileInfo.getState());

                text.setText(dataConnectionStatus);

                if(dataConnectionStatus == "DISCONNECTED") {








                }

            }

        });
    }
}
0

Tutaj wszystko jest w porządku. Rozumiem, że w tym ifie chcesz wywołać tę metodę którą masz wyżej. Tak?

0

dokładnie w tym ifie

0

Jak coś się świeci na czerwono, to tam zawsze wyskakuje jakiś podpowiedź, rozwiązanie. Warto to czasem przeczytać.
No ale Twoja klasa będzie wyglądała mniej więcej tak:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MainActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        final TextView text = (TextView) findViewById(R.id.ukrytyTekst);

        Button manageVisibilityOfText = (Button) findViewById(R.id.guzik);

        manageVisibilityOfText.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                text.setVisibility(View.VISIBLE);

                ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

                NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

                String dataConnectionStatus = String.valueOf(mobileInfo.getState());

                text.setText(dataConnectionStatus);

                if(dataConnectionStatus == "DISCONNECTED") {
                    
                    try {
                        setMobileDataEnabled(getApplicationContext(), true);
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                    } catch (NoSuchFieldException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    }

                }

            }

        });
    }
    private void setMobileDataEnabled(Context context, boolean enabled) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        final ConnectivityManager conman = (ConnectivityManager)  context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final Class conmanClass = Class.forName(conman.getClass().getName());
        final Field connectivityManagerField = conmanClass.getDeclaredField("mService");
        connectivityManagerField.setAccessible(true);
        final Object connectivityManager = connectivityManagerField.get(conman);
        final Class connectivityManagerClass =  Class.forName(connectivityManager.getClass().getName());
        final Method setMobileDataEnabledMethod = connectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
        setMobileDataEnabledMethod.setAccessible(true);

        setMobileDataEnabledMethod.invoke(connectivityManager, enabled);
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1