大家好,本人刚刚接触Andorid,很多地方不懂,希望大侠多多赐教,不胜感激。现请教一个问题:手机是使用电信3G网络的,请问怎么用代码实现移动网络数据访问功能(即设置里面的选项开关"启动移动数据"的打开与关闭)。分数不多了,希望大家帮忙,非常感谢。
解决方案 »
- 程序一旦 new socket("10.0.2.2",8888),程序就提示unfortunately myan20130425 has stop,请教各位高手
- Android4.0 模拟器 视频播放
- 新人求助关于水果忍者项目的问题?怎么让水果一个接一个得出现啊??
- android 线程 sleep 的问题
- 泣血求助!!!android程序无法运行到虚拟机上
- ListView 能实现动态列吗? 在线求解!!!!!!!!!!
- 应用移到sd卡
- android蓝牙配对问题
- 请问 判断是否联网和 是否有可用网络 这两个方法作用是不是一样的
- 普通new 个Handler,AS会提示泄漏。
- 如何获得WebView网页加载完成这个事件
- Android Animation和ArrayAdapter问题
// 调用setMobileDataEnabled方法
setMobileDataEnabledMethod.invoke(iConMgr, true);报错为:Permission denial: writing to secure settings requires android.permission.WRITE_SECURE_SETTINGS
在AndroidManifest.xml文件里添加了:<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>但是还是会报这个错误,还要添加哪些配置吗?
@SuppressWarnings("unchecked")
public void openDataConnect() throws ClassNotFoundException,
SecurityException, NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
Method dataConnSwitchmethod;
Class telephonyManagerClass;
Object ITelephonyStub;
Class ITelephonyClass;
boolean isEnabled = false;
TelephonyManager telephonyManager = (TelephonyManager) context.get()
.getSystemService(Context.TELEPHONY_SERVICE);
//获取当前的状态
if(telephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED){
isEnabled = true;
}else{
isEnabled = false;
}
telephonyManagerClass = Class.forName(telephonyManager.getClass().getName());
Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony");
getITelephonyMethod.setAccessible(true);
ITelephonyStub = getITelephonyMethod.invoke(telephonyManager);
ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName());
if (isEnabled) {
dataConnSwitchmethod = ITelephonyClass
.getDeclaredMethod("disableDataConnectivity");
} else {
dataConnSwitchmethod = ITelephonyClass
.getDeclaredMethod("enableDataConnectivity");
}
dataConnSwitchmethod.setAccessible(true);
dataConnSwitchmethod.invoke(ITelephonyStub);
}
* TODO: Listen for changes to the data connection.
*/
public class DataEnabledController extends BroadcastReceiver implements CompoundButton.OnCheckedChangeListener {
private static final String TAG = "StatusBar.DataEnabledController"; private Context mContext;
private CompoundButton mCheckBox;
private boolean mAirplaneMode;
private boolean mDataEnabled;
ConnectivityManager cm;
public DataEnabledController(Context context, CompoundButton checkbox) {
mContext = context;
cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
mDataEnabled = getDataEnabled();
mAirplaneMode = getAirplaneMode();
mCheckBox = checkbox;
checkbox.setEnabled(!mAirplaneMode);
setCheckBoxVisible(!mAirplaneMode);
checkbox.setChecked(mDataEnabled);
checkbox.setOnCheckedChangeListener(this);
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
context.registerReceiver(this, filter);
} public void onCheckedChanged(CompoundButton view, boolean checked) {
if (checked != mDataEnabled && !mAirplaneMode) {
setDataEnabled(checked);
}
} private void setCheckBoxVisible(boolean isVisible){
int visible = View.VISIBLE;
visible = isVisible?View.VISIBLE:View.INVISIBLE;
mCheckBox.setVisibility(visible);
}
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(intent.getAction())) {
final boolean enabled = intent.getBooleanExtra("state", false);
if (enabled != mAirplaneMode) {
mAirplaneMode = enabled;
mCheckBox.setEnabled(!mAirplaneMode);
setCheckBoxVisible(!mAirplaneMode);
}
}
} private boolean getAirplaneMode() {
ContentResolver cr = mContext.getContentResolver();
return 0 != Settings.System.getInt(cr, Settings.System.AIRPLANE_MODE_ON, 0);
}
private boolean getDataEnabled() {
if(cm == null){
cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
}
return cm.getMobileDataEnabled();
}
private void setDataEnabled(final boolean dataEnabled) {
mDataEnabled = dataEnabled;
AsyncTask.execute(new Runnable() {
public void run() {
if(cm == null){
cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
}
cm.setMobileDataEnabled(mCheckBox.isChecked());
}
});
}
}
//增加数据广播实例声明
DataEnabledController mDataEnabled;
...
//在该方法下增加~
protected void onFinishInflate() {
...
mDataEnabled = new DataEnabledController(context,
(CompoundButton)findViewById(R.id.dataEnable_checkbox));
}}
再在SystemUI\res下相应的xml布局文件内加入
<LinearLayout
android:id="@+id/dataEnable"
style="@style/StatusBarPanelSettingsRow"
>
<ImageView
android:id="@+id/dataEnable_icon"
style="@style/StatusBarPanelSettingsIcon"
android:src="@drawable/ic_sysbar_data_switcher"
/>
<TextView
android:id="@+id/dataEnable_label"
style="@style/StatusBarPanelSettingsContents"
android:text="@string/status_bar_settings_data_enabled"
/>
<Switch
android:id="@+id/dataEnable_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="5dp"
/>
</LinearLayout>
<View style="@style/StatusBarPanelSettingsPanelSeparator" />
最后在SystemUI\res下加入相应资源图片和字符串即可~ 希望对你有所帮助~