【发布时间】:2014-07-03 12:53:49
【问题描述】:
我正在尝试在我的应用中设置白名单。我有一个服务设置,当它检测到某个应用程序已启动时会触发另一个服务。我有一个包裹挑选活动,它用复选框构建了一个漂亮的列表。当我选择一个复选框时,我想将该选定的应用程序添加到“白名单”中。然后,我希望我的服务在运行时检查该白名单。我无法让我的白名单将其列表传递给我的服务。这是我正在使用的包列表...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
// this has to be done before any preferences are populated!
getPreferenceManager().setSharedPreferencesMode(Context.MODE_WORLD_READABLE);
addPreferencesFromResource(R.xml.preferences2);
// get a list of launchable apps
PackageManager pm = getPackageManager();
Intent main = new Intent(Intent.ACTION_MAIN, null);
main.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> launchables = pm.queryIntentActivities(main, 0);
Collections.sort(launchables,
new ResolveInfo.DisplayNameComparator(pm));
PreferenceCategory targetCategory = (PreferenceCategory) findPreference("targetCategory");
targetCategory.setTitle(getString(R.string.settings_header));
for (ResolveInfo info : launchables) {
// get app info
ActivityInfo activity = info.activityInfo;
ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
final String pkgName = name.getPackageName();
CharSequence appName = info.loadLabel(pm);
CheckBoxPreference checkBoxPreference = new CheckBoxPreference(this);
// set the data
checkBoxPreference.setKey(pkgName);
checkBoxPreference.setTitle(appName);
checkBoxPreference.setSummary(pkgName);
checkBoxPreference.setIcon(info.loadIcon(pm));
// add to category
targetCategory.addPreference(checkBoxPreference);
}
}
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Preference pref = findPreference(key);
CheckBoxPreference cbtp = (CheckBoxPreference) pref;
final String pkgName = key;
}
}
这是我用来检查正在运行的应用程序的服务。我需要检查是否已从该列表中选择了正在运行的应用程序。如果已检查当前应用程序,我希望我的服务运行。我的服务运行良好,而且列表很好。我似乎无法让他们一起工作。
@Override
public void run() {
SharedPreferences mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
vibenabled = mySharedPreferences.getBoolean("vib_preference", false);
pkgName = prefs.getBoolean(pkgName, false);
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
Log.d(TAG, "Its running");
String lastPkg = am.getRunningTasks(1).get(0).topActivity.getPackageName();
if (selectedPkg.equals(lastPkg)) {
startService();
【问题讨论】:
标签: java android performance listview sharedpreferences