2011-04-19 50 views
0

我正在嘗試使用ToggleButton來打開和關閉AirPlane模式。我不知道如何去做這件事。AirPlane ToggleButton?

我的權限是:

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

我的.XML文件看起來是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<TextView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello" 
/> 
<ToggleButton 
android:id="@+id/Toggle" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textOn="On" 
android:textOff="Off"> 
</ToggleButton> 
</LinearLayout> 

我的Java有此爲切換按鈕:

AirToggle = (ToggleButton) findViewById(R.id.Toggle); 
    AirToggle.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 

     if (((ToggleButton)v).isChecked()){ 
      boolean isEnabled = Settings.System.getInt(context.getContentResolver(),Settings.System.AIRPLANE_MODE_ON, 0) == 1; 
      if(isEnabled == false) 
      { 
      Settings.System.putInt(context.getContentResolver(),Settings.System.AIRPLANE_MODE_ON,1);        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); 
      intent.putExtra("state", 1); 
      context.sendBroadcast(intent); 
      } 

      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"); 
        } 
      }; 

      context.registerReceiver(receiver, intentFilter); 


      } 

    }; 
}); 

}

更新: 這是我的日誌貓錯誤,如果有幫助。

04-19 18:43:24.264: ERROR/AndroidRuntime(233): ERROR: thread attach failed 

04-19 18:43:25.933: ERROR/AndroidRuntime(241): ERROR: thread attach failed 

04-19 18:43:31.543: ERROR/AndroidRuntime(248): Uncaught handler: thread main exiting due   to uncaught exception 

04-19 18:43:31.553: ERROR/AndroidRuntime(248): java.lang.NullPointerException 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at  com.simple.armor.SimpleArmor$1.onClick(SimpleArmor.java:30) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.view.View.performClick(View.java:2364) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.widget.CompoundButton.performClick(CompoundButton.java:98) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.view.View.onTouchEvent(View.java:4179) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.widget.TextView.onTouchEvent(TextView.java:6541) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.view.View.dispatchTouchEvent(View.java:3709) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.os.Handler.dispatchMessage(Handler.java:99) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.os.Looper.loop(Looper.java:123) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at android.app.ActivityThread.main(ActivityThread.java:4363) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at java.lang.reflect.Method.invokeNative(Native Method) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at java.lang.reflect.Method.invoke(Method.java:521) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

04-19 18:43:31.553: ERROR/AndroidRuntime(248):  at dalvik.system.NativeStart.main(Native Method) 

04-19 18:43:31.573: ERROR/dalvikvm(248): Unable to open stack trace file '/data/anr/traces.txt': Permission denied 

請幫忙。

- 謝謝。

+0

哪條線是30號線?根據日誌,您有一個空參考例外。你讀過日誌嗎?另外,在「Settings.System。」開始的行上有兩行完全不同的語句。這會傷害嬰兒小貓。 – 2011-04-19 18:56:56

+0

@Stealth拉比行第三十將布爾isEnabled = Settings.System.getInt(context.getContentResolver(),Settings.System.AIRPLANE_MODE_ON,0)== 1; 我真的不知道如何閱讀日誌......我沒有看到它是關於第30行 – Christian 2011-04-19 19:02:51

+0

@Christian,你確定嗎?你有兩條關於這條線的聲明。你怎麼知道日誌是指哪一個?無論將它移動到一個單獨的行!您提供的日誌告訴您由於在第30行執行語句而導致存在空引用異常。 – 2011-04-19 19:08:38

回答

0

請參閱問題所附的註釋。變量「上下文」未分配,導致Null引用異常。設置Air Plane模式設置背後的邏輯沒有任何問題。

-2

權限被拒絕,也許Manifest.xml中的權限不正確,android版本不同,權限也不一樣。

+0

我有正確的方法來解決這個問題,我的上層給出了一個鏈接。鏈接中的方法是正確的,我測試它。http://www.shaikhhamadali.blogspot.com/2013/09/control-airplane-mode-onoff-android.html – Allen 2015-03-23 13:40:00