2011-08-15 41 views
3

num> 50이면 비행기 모드를 해제하고 싶습니다.이 코드는 (Toggle airplane mode in Android에서) 구현했지만, 실행하면 강제로 닫을 수 있습니다.안드로이드에서 비행기 모드 끄기

   if(num>50){ 
        // read the airplane mode setting 
        boolean isEnabled = Settings.System.getInt(
          getContentResolver(), 
          Settings.System.AIRPLANE_MODE_ON, 0) == 1; 

        // toggle airplane mode 
        Settings.System.putInt(
          getContentResolver(), 
          Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1); 

        // Post an intent to reload 
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); 
        intent.putExtra("state", !isEnabled); 
        sendBroadcast(intent); 



       } 

o.k. 예를 구현했지만 if 문을 변경하려고합니다.

if num>=50 and airplane mode=on toggle it off 
if airplane mode=off and num<50 toggle it on 

새 코드를 작성하는 데 도움이 될만한 사람이 있습니까? (난 초보자입니다)

+5

시원하고 도움 질문에 대한 답변을 받아! – evilone

답변

8
이 가장 가능성이 AndroidManifest.xmlWRITE_SETTING 권한을 추가하지 않은

여기를보세요 에 대한 문서에 따르면 ACTION_AIRPLANE_MODE_CHANGED :

이것은 시스템에서만 보낼 수있는 보호 된 의도입니다.

현재 시스템 권한없이이 브로드 캐스트를 보낼 수 있지만 이후의 Android 버전에서는 변경 될 수 있습니다.

3

안드로이드 매니페스트에서 비행기 모드 전환 토큰을 설정했는지 확인하십시오.

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

는 또한 그 코드주의 :

Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); 
intent.putExtra("state", !isEnabled); 
sendBroadcast(intent); 

을 아닌가요

것은 Toggle airplane mode in Android

이 이
1

코드 다음을 참조하십시오 :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    IntentFilter intentFilter = new IntentFilter("android.intent.action.SERVICE_STATE"); 

    BroadcastReceiver receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Log.d("AirplaneMode", "Service state changed"); 
       Toast.makeText(getApplicationContext(), "Service state changed", Toast.LENGTH_LONG).show(); 
       boolean isEnabled = isAirplaneModeOn(context); 
      /* setSettings(context, isEnabled?1:0); 
       Intent intent_mode = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); 
       intent_mode.putExtra("state", !isEnabled); 
       context.sendBroadcast(intent_mode);*/ 

       if(isEnabled==true) 
       { setSettings(context, isEnabled?1:0); 
        Toast.makeText(getApplicationContext(), "Flight mode on", Toast.LENGTH_LONG).show(); 
        Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0); 
        Intent newIntent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); 
        newIntent.putExtra("state", false); 
        sendBroadcast(newIntent); 
       } 
       else 
       { setSettings(context, isEnabled?1:0); 
        Toast.makeText(getApplicationContext(), "Flight mode off", Toast.LENGTH_LONG).show(); 
       } 

      } 

     @SuppressLint("NewApi") 
     private void setSettings(Context context, int value) { 
      // TODO Auto-generated method stub 

      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { 
       Settings.System.putInt(
          context.getContentResolver(), 
          Settings.System.AIRPLANE_MODE_ON, value); 
      } else { 
       Settings.Global.putInt(
          context.getContentResolver(), 
          Settings.Global.AIRPLANE_MODE_ON, value); 
      }  

     } 

     @SuppressLint("NewApi") 
     public boolean isAirplaneModeOn(Context context) { 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      return Settings.System.getInt(context.getContentResolver(), 
        Settings.System.AIRPLANE_MODE_ON, 0) != 0;   
     } else { 
      return Settings.Global.getInt(context.getContentResolver(), 
        Settings.Global.AIRPLANE_MODE_ON, 0) != 0; 
     }  
    } 
    }; 

    registerReceiver(receiver, intentFilter); 


} 

//permissions needed: 

// //

+0

변경 한 내용을 설명하십시오. – Avijit

+0

먼저, 브로드 캐스트 수신기를 사용하여 백그라운드에서 작동하도록합니다 ... 버전 관련 문제에 사용되는 setSettings() 메소드를 살펴보십시오 ... 그리고 IntentFilter intentFilter = new IntentFilter ("android.intent.action.SERVICE_STATE"); 중요한 부분입니다 ... ur 질문에 대한 답변이 있으면 알려주세요 ... –