android 设置飞行模式经常失败的最终解决方法

折腾了几天,设置飞行模式老是有失败的时候,文中只是写出了项目中的部分代码,设置飞行模式的时候,有的状态下是不能设置的,设置之前要通过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);
   }

你可能感兴趣的:(android 设置飞行模式经常失败的最终解决方法)