折腾了几天,设置飞行模式老是有失败的时候,文中只是写出了项目中的部分代码,设置飞行模式的时候,有的状态下是不能设置的,设置之前要通过TelephonyProperties.PROPERTY_INECM_MODE来判断是否能够设置,如果能设置,则调用sendAndSetFlayMode函数,如果不能则等待系统广播ACTION_EMERGENCY_CALLBACK_MODE_CHANGED到了的时候,便可设置了。
else if(action.equals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED))
{
if (!(intent.getBooleanExtra("PHONE_IN_ECM_STATE", false)) && mIsWaitingForEcmExit) {
mIsWaitingForEcmExit = false;
sendAndSetFlayMode(mFlyOn, mIset);
}
}
private void setFlayMode(boolean status, boolean iset)
{
mFlyOn = status;
if (Boolean.parseBoolean(SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE)))
{
mIset = iset;
mIsWaitingForEcmExit = true;
}
else {
mIset = false;
sendAndSetFlayMode(status, iset);
}
}
private void sendAndSetFlayMode(boolean status, boolean iset)
{
if(status)
{
Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1);
}
else {
Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0);
}
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
intent.putExtra("state", status);
if(iset)
{
intent.putExtra("pytset", true);
}
BackService.this.sendBroadcast(intent);
}