To changing and accessing mobile need to add two permissions as following:
- android.permission.CHANGE_NETWORK_STATE
- android.permission.ACCESS_NETWORK_STATE
package com.example.mobilenetworkcontrol;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.content.Context;
import android.net.ConnectivityManager;
public class MobileSettings {
/**add permission:
* 1. android.permission.CHANGE_NETWORK_STATE
* 2. android.permission.ACCESS_NETWORK_STATE
* **/
Context mContext;
public MobileSettings(Context context){
mContext = context;
}
/**
* Check mobile network is enabled or not.
* @return true if mobile is enabled, otherwise false.
*/
public boolean isEnabled()
{
boolean mobileDataEnabled = false; // Assume disabled
ConnectivityManager cm = (ConnectivityManager) mContext.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;
}
/**
* Enabling or disabling the mobile network.
* @param enable true for turning on the mobile network. false for turning of the mobile network.
*/
public void setEnabled(boolean enable){
final ConnectivityManager conman = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
Class<?> conmanClass = null;
try { conmanClass = Class.forName(conman.getClass().getName());}
catch (ClassNotFoundException e) {e.printStackTrace();}
Field iConnectivityManagerField = null;
try {iConnectivityManagerField = conmanClass.getDeclaredField("mService");}
catch (SecurityException e1) {e1.printStackTrace(); }
catch (NoSuchFieldException e1) {e1.printStackTrace();}
iConnectivityManagerField.setAccessible(true);
Object iConnectivityManager = null;
try {iConnectivityManager = iConnectivityManagerField.get(conman);}
catch (IllegalArgumentException e) {e.printStackTrace();}
catch (IllegalAccessException e) {e.printStackTrace();}
Class<?> iConnectivityManagerClass = null;
try {iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());}
catch (ClassNotFoundException e) {e.printStackTrace();}
Method setMobileDataEnabledMethod = null;
try {setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);}
catch (SecurityException e1) {e1.printStackTrace();}
catch (NoSuchMethodException e1) {e1.printStackTrace();}
setMobileDataEnabledMethod.setAccessible(true);
try {setMobileDataEnabledMethod.invoke(iConnectivityManager, enable);}
catch (IllegalArgumentException e) {e.printStackTrace();}
catch (IllegalAccessException e) {e.printStackTrace();}
catch (InvocationTargetException e) {e.printStackTrace();}
}
}
In MainActivity.java:
package com.example.mobilenetworkcontrol;
import android.app.Activity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Switch;
public class MainActivity extends Activity implements OnCheckedChangeListener{
Switch sw_mobile;
MobileSettings mMobileSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// get the UI object.
sw_mobile = (Switch) this.findViewById(R.id.switch_mobile);
sw_mobile.setOnCheckedChangeListener(this);
// mobile settings object
mMobileSettings = new MobileSettings(this);
// check mobile switch.
boolean mobileEnabled = mMobileSettings.isEnabled();
sw_mobile.setChecked(mobileEnabled);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(buttonView == sw_mobile){
if(isChecked == true){
//turn on the mobile network
mMobileSettings.setEnabled(true);
}
else{
//turn off the mobile network
mMobileSettings.setEnabled(false);
}
}//if(buttonView == sw_mobile)
}
}
In activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:orientation="vertical" >
<TextView
android:id="@+id/text_mobile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Mobile Network"
android:textColor="#FFFFFFFF"
android:textSize="26dp" />
</LinearLayout>
<Switch
android:id="@+id/switch_mobile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
In AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mobilenetworkcontrol"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.mobilenetworkcontrol.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
沒有留言 :
張貼留言