标签:preferenceactivity android checkboxpreference
我正在通过选中或取消选中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();
}
解决方法:
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;
}
});
标签:preferenceactivity,android,checkboxpreference 来源: https://codeday.me/bug/20190729/1568856.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。