在Android 4.4中,在app中打开或关闭数据流量
如果有这方面需求可以参考。
改变状态要添加
访问数据要添加
在视图中只需要添加一个按钮充当开关:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="144dp"
android:text="打开/关闭 GPRS" />
在JAVA文件中利用反射机制打开或者关闭数据流量:
package com.example.opengprs;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button OnOff = (Button) findViewById(R.id.button1);
OnOff.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Method dataConnSwitchmethod;
Class connManagerClass;
Object IConnStub;
Class IConnClass;
boolean isEnable;
NetworkInfo mNetworkInfo;
ConnectivityManager ConnManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
mNetworkInfo=ConnManager.getActiveNetworkInfo();
if(mNetworkInfo != null){
if(mNetworkInfo.isAvailable()==true)
isEnable = true;
else
isEnable = false;
}else{
isEnable = false;
}
try {
connManagerClass = Class.forName(ConnManager.getClass().getName());
Method m[]=connManagerClass.getDeclaredMethods();
for(int i=0;i
Log.d("OnOff", m[i].toString());
Field getITelephonyMethod = connManagerClass.getDeclaredField("mService");
getITelephonyMethod.setAccessible(true);
IConnStub = getITelephonyMethod.get(ConnManager);
IConnClass = Class.forName(IConnStub.getClass().getName());
dataConnSwitchmethod=IConnClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
dataConnSwitchmethod.setAccessible(true);
dataConnSwitchmethod.invoke(IConnStub,!isEnable);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException 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 (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}
这样就可以在APP里打开或关闭数据流量了。