我想启用飞行模式但是如果我启用飞行模式我无法使用蓝牙,wifi。我的目的是仅限制接收电话和短信相关的事情。
我尝试了以下内容,但它不起作用;
Settings.System.putString(getContentResolver(),
Settings.System.AIRPLANE_MODE_RADIOS, "cell,bluetooth");
任何人都可以帮助我
答案 0 :(得分:2)
您可以更改激活飞机模式时关闭的无线电。如果在激活飞机模式之前执行此操作,则可以仅关闭无线电单元。
注意:更改AIRPLANE_MODE_RADIOS会影响用于切换飞机的系统按钮的行为。
以下是一些示例代码,在Android 2.2上进行了测试。
// Toggle airplane mode.
Settings.System.putInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);
// Change so that only radio cell is turned off
// NOTE: This affects the behavior of the system button for
// toggling air-plane mode. You might want to reset it, in order to
// maintain the system behavior.
Settings.System.putString(context.getContentResolver,
Settings.System.AIRPLANE_MODE_RADIOS, "cell");
// Post an intent to reload.
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", !isEnabled);
sendBroadcast(intent);
答案 1 :(得分:1)
据我所知,飞行模式将涵盖选择禁用所有无线通信的设置。
如果您只想禁用部件,则必须单独完成,而不是通过飞行模式。
为您希望终止的每个通信部分尝试一种方法。
答案 2 :(得分:0)
试试这个。我无法保证它能在所有设备上正常运行。
private ITelephony getTelephonyService() {
try {
TelephonyManager oTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
Method mGetITelephony = oTelephonyManager.getClass().getDeclaredMethod("getITelephony", new Class[] {});
mGetITelephony.setAccessible(true);
return (ITelephony) mGetITelephony.invoke(oTelephonyManager, new Object[] {});
} catch (Exception e) {
return null;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
boolean retval = getTelephonyService().setRadio(false);
Log.v("Radio", "SetRadio : " + retval);
} catch (Exception e) {
Log.v("Radio", Log.getStackTraceString(e));
}
}
您还需要ITelephony.aidl文件。在项目的src文件夹下创建一个包com.android.internal.telephony
,并在其中创建一个文件ITelephony.aidl
,其中包含以下内容:
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.internal.telephony;
import android.os.Bundle;
import java.util.List;
/**
* Interface used to interact with the phone. Mostly this is used by the
* TelephonyManager class. A few places are still using this directly.
* Please clean them up if possible and use TelephonyManager insteadl.
*
* {@hide}
*/
interface ITelephony {
/**
* Check to see if the radio is on or not.
* @return returns true if the radio is on.
*/
boolean isRadioOn();
/**
* Toggles the radio on or off.
*/
void toggleRadioOnOff();
/**
* Set the radio to on or off
*/
boolean setRadio(boolean turnOn);
}
答案 3 :(得分:0)
您有2个可以更改的设置数组:
airplane_mode_radios=cell,bluetooth,wifi,nfc,wimax
airplane_mode_toggleable_radios=bluetooth,wifi,nfc
例如,如果您想防止在“飞行”模式下禁用蓝牙,
您可以从airplane_mode_radios
并且如果您想防止蓝牙在以前未启用的情况下无法启用(是的,有时在打开和关闭飞行模式时可能会发生这种情况)
因此您可以从airplane_mode_toggleable_radios
中删除蓝牙(如果在开启和关闭飞行模式之前启用了蓝牙,则该蓝牙仍然会启用)
使用亚行:
adb shell settings put global airplane_mode_radios 'cell,wifi,nfc,wimax'
adb shell settings put global airplane_mode_toggleable_radios 'wifi,nfc'
以编程方式使用:
Settings.Global.putString(getContentResolver(), "airplane_mode_radios", "cell,wifi,nfc,wimax");
Settings.Global.putString(getContentResolver(), "airplane_mode_toggleable_radios", "wifi,nfc");
注意:完成后,请重新启动设备