2013-02-24 3 views
3

체크 또는 체크 해제하여 서비스를 시작 또는 중지하는 앱을 작성하고 있습니다. CheckBoxPreference 샘플 코드 또는 자습서와 같은 정보를 찾으려고했습니다. 그러나 나는 아직 찾지 못했다. CheckBoxPreference 을 확인하거나 선택 취소하여 서비스를 시작 또는 중지하는 방법은 PreferenceActivity입니까? "service_toggle"키가 true 일 때 서비스를 시작하고 "service_toggle"키가 false 일 때 서비스를 중지합니다. CheckBoxPreference을 선택/선택 취소하여 서비스 시작/중지에 대한 샘플 코드 또는 자습서가 있습니까?체크 박스를 선택/선택 취소하여 서비스 시작/중지


Settings.java

package kr.hybdms.sidepanel; 

import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.preference.Preference; 
import android.preference.Preference.OnPreferenceClickListener; 

import com.actionbarsherlock.app.SherlockPreferenceActivity; 
import kr.hybdms.sidepanel.R; 

public class Settings extends SherlockPreferenceActivity implements OnPreferenceClickListener{ 

     @SuppressWarnings("deprecation") 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 



     Preference pAppName = (Preference)findPreference("blog_intent"); 
     Preference pAppVersion = (Preference)findPreference("appinfo_intent"); 

     pAppName.setOnPreferenceClickListener(this); 
     pAppVersion.setOnPreferenceClickListener(this); 
    } 

    @Override 
    public boolean onPreferenceClick(Preference preference) 
    { 

     if(preference.getKey().equals("blog_intent")) 
     { 
      Intent blog = new Intent(Intent.ACTION_VIEW); 
      blog.setData(Uri.parse("http://hybdms.blogspot.kr")); 
      startActivity(blog); 
     } 

     else if(preference.getKey().equals("appinfo_intent")) 
     { 
      Intent appinfo = new Intent(Settings.this, Appinfo.class); 
      startActivity(appinfo); 
     } 
     return false; 
    } 

} 

Settings.XML의

: 여기

내 코드입니다 이미 기본 설정에 탭하여 사용자를 감지하는 코드를 가지고있는 것처럼
<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
     xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBoxPreference android:key="service_toggle" android:title="@string/pref_service_toggle" android:summary="@string/pref_service_toggle_sub" android:defaultValue="false"/> 
    <CheckBoxPreference android:key="autostart_toggle" android:title="@string/pref_auto" android:summary="@string/pref_auto_sub" android:defaultValue="false" android:selectable="false" android:enabled="false"/> 
    <Preference android:key="guide_intent" android:selectable="false" android:summary="@string/pref_guide_sub" android:title="@string/pref_guide" android:enabled="false"/> 
    <Preference android:key="blog_intent" android:summary="@string/pref_blog_sub" android:title="@string/pref_blog"/> 
    <Preference android:key="appinfo_intent" android:summary="@string/pref_appinfo_sub" android:title="@string/pref_appinfo"/> 

</PreferenceScreen> 

는 TouchDetectService.java

package kr.hybdms.sidepanel; 

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.view.Gravity; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.view.WindowManager; 
import android.widget.ImageView; 
import android.graphics.PixelFormat; 

public class TouchDetectService extends Service { 
    private ImageView mTouchDetector;       
    private WindowManager.LayoutParams mParams;  
    private WindowManager mWindowManager;  

    private OnTouchListener mViewTouchListener = new OnTouchListener() { 
     @Override public boolean onTouch(View v, MotionEvent event) { 
      switch(event.getAction()) { 

       case MotionEvent.ACTION_MOVE: 

        Intent lsp = new Intent(getBaseContext(), LeftSidePanel.class); 
        lsp.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        getApplication().startActivity(lsp); 
        break; 
      } 

      return true; 
     } 
    }; 

    @Override 
    public IBinder onBind(Intent arg0) { return null; } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

      mTouchDetector = new ImageView(this);           
      mTouchDetector.setImageResource(R.drawable.detector); 
      mTouchDetector.setOnTouchListener(mViewTouchListener);    

      mParams = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSLUCENT);           
      mParams.gravity = Gravity.LEFT | Gravity.CENTER;     

      mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
      mWindowManager.addView(mTouchDetector, mParams);  permission 
     } 

    @Override 
    public void onDestroy() { 
     if(mWindowManager != null) {   
      if(mTouchDetector != null) mWindowManager.removeView(mTouchDetector); 
     } 
     super.onDestroy(); 
    } 
+0

보인다. 그 값을보고 startService 또는 stopService를 호출하십시오. –

+0

@GabeSechan하지만 서비스를 시작하거나 중지하려면 "service_toggle"에 따라 달라집니다. CheckBoxPreference 값 – sukso

+0

그렇게하지 마십시오. 사용자 [this] [1] 접근. [1] : http://stackoverflow.com/questions/12214673/how-to-apply-condition-onpreferenceclick-in-android – JanithaR

답변

5
CheckBoxPreference checkboxPref = (CheckBoxPreference)getPreferenceManager().findPreference("service_toggle"); 

checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {    

    public boolean onPreferenceChange(Preference preference, Object newValue) { 

     boolean myValue = (Boolean) newValue; 

     if(myValue) 
      startService(new Intent(Settings.this, TouchDetectService.class)); 
     else 
      stopService(new Intent(Settings.this, TouchDetectService.class)); 

     return true; 
    } 
}); 
+0

감사를 많이 내 대답을 참조 ! 그것은 너무 잘 작동합니다! – sukso

+0

주의 - OnPreferenceChangeListener에 대한 참조를 유지해야합니다. 그렇지 않으면 가비지 수집 될 수 있습니다. docs : https://developer.android.com/guide/topics/ui/settings.html#Listening을 참조하십시오. – smarcantonio

1
public class Settings extends SherlockPreferenceActivity implements OnPreferenceClickListener, OnPreferenceChangeListener { 

     @SuppressWarnings("deprecation") 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     ......... 

     CheckBoxPreference chkServiceToogle = (CheckBoxPreference)findPreference("service_toggle"); 
     chkServiceToogle.setOnPreferenceChangeListener(this); 
    } 

    @Override 
    public boolean onPreferenceChange(Preference preference, String key) 
    { 
     if (key.equals("service_toggle")) { 
      if(sharedPreferences.getBoolean(key, false)) { 
       Intent intent = new Intent(getApplicationContext(), TouchDetectService.class); 
       startService(intent); 
      } else { 
       Intent intent = new Intent(getApplicationContext(), TouchDetectService.class); 
       stopService(intent); 
      } 
     } 
    } 
........ 
}