Я пытаюсь зарегистрировать и отменить регистрацию трансляционного вещателя в классе бездействия.Регистрация широковещательного приемника в классе неактивности
public class AppDetectionEnabler implements OnCheckedChangeListener {
protected final Context mContext;
private Switch mSwitch;
private String config;
PackageManager pm;
ComponentName receiver;
private IntentFilter intentFilter;
public AppDetectionEnabler(Context context, Switch swtch, String config) {
mContext = context;
this.config = config;
receiver = new ComponentName(mContext, AppDetectionService.class);
pm = mContext.getPackageManager();
intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.PACKAGE_ADDED");
intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");
setSwitch(swtch);
}
public void onCheckedChanged(CompoundButton view, boolean isChecked) {
SharedPreferences prefs;
Editor editor;
prefs = mContext.getSharedPreferences("prefs_app", Context.MODE_PRIVATE);
editor = prefs.edit();
if(config == "AppDetection"){
if(!isChecked){
mContext.unregisterReceiver(AppDetectionService.class);
}
else if(isChecked){
mContext.registerReceiver(AppDetectionService.class, intentFilter);
}
}
editor.putBoolean("APP_ENABLED", isChecked);
editor.commit();
}
}
Я сделал это как описано выше в методе onCheckedChanged. Но это не работает. Я создаю intenfilter в вышеуказанном классе, так что в manifest.xml отсутствует часть приемника.
Когда я ищу ошибку, он говорит «переименовать». Есть что-то вроде «Broadcastreceiver не работает в классе неактивности 'или smtg?
AppDetectionService.java
public class AppDetectionService extends BroadcastReceiver{
ArrayList<String> added = new ArrayList<String>();
ArrayList<String> deleted = new ArrayList<String>();
Bundle b=new Bundle();
PackageManager pm;
Dictionary<String,PermissionInfo> permissions;
SharedPreferences prefs;
Editor editor;
Set<String> addSet = new HashSet<String>();
@Override
public void onReceive(Context context, Intent intent) {
//gets the installed or removed application
Uri data = intent.getData();
Log.i(AppDetectionService.class.getName(), "Action: " + intent.getAction());
Log.i(AppDetectionService.class.getName(), "The DATA: " + data);
prefs = context.getSharedPreferences("added", Context.MODE_PRIVATE);
editor = prefs.edit();
if(intent.getAction().equals("android.intent.action.PACKAGE_ADDED")){
permissions = new Hashtable<String,PermissionInfo>();
try{
pm = context.getPackageManager();
String[] pName = data.toString().split(":");
PackageInfo packageInfo = pm.getPackageInfo(pName[1], PackageManager.GET_PERMISSIONS);
added.add(pName[1]);
addSet.addAll(added);
editor.putInt("added", added.size());
editor.putStringSet("added", addSet);
//permissions
if (packageInfo.requestedPermissions != null){
for (String permName : packageInfo.requestedPermissions)
{
try
{
permissions.put(pName[1], pm.getPermissionInfo(permName, PackageManager.GET_META_DATA));
}
catch (NameNotFoundException e){}
}
}
}catch (NameNotFoundException e){}
editor.commit();
}
if(intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")){
permissions = new Hashtable<String,PermissionInfo>();
pm = context.getPackageManager();
String[] pName = data.toString().split(":");
deleted.add(pName[1]);
}
}
}
«Но это не работает». Что происходит в сравнении с ожидаемым результатом? Также может быть связано: [Как сравнить строки в Java] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – zapl
Я положил изображение строк ошибок. Только предложение «Переименовать в файл» .. – lifetime
@lifetime показать объявление класса AppDetectionService ... –