2013-12-02 3 views
0

Я пытаюсь зарегистрировать и отменить регистрацию трансляционного вещателя в классе бездействия.Регистрация широковещательного приемника в классе неактивности

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?

enter image description here

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]); 

    } 




    } 


} 
+0

«Но это не работает». Что происходит в сравнении с ожидаемым результатом? Также может быть связано: [Как сравнить строки в Java] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – zapl

+0

Я положил изображение строк ошибок. Только предложение «Переименовать в файл» .. – lifetime

+0

@lifetime показать объявление класса AppDetectionService ... –

ответ

0

попробовать это ...

public class AppDetectionEnabler implements OnCheckedChangeListener { 
    protected final Context mContext; 
    private Switch mSwitch; 
    private String config; 
    private PackageManager pm; 
    private AppDetectionService receiver; 
    private IntentFilter intentFilter; 

    public AppDetectionEnabler(Context context, Switch swtch, String config) { 
     mContext = context; 
     this.config = config; 
     receiver = new AppDetectionService(); 
     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(receiver); 
      } else if (isChecked) { 
       mContext.registerReceiver(receiver,intentFilter); 
      } 
     } 

     editor.putBoolean("APP_ENABLED", isChecked); 
     editor.commit(); 
    } 
} 

, но не забудьте отменить приемник, когда-либо ваш контекст будет уничтожить ...

+0

Он работал. спасибо .. произошли разные ошибки, но его обо мне :) – lifetime

Смежные вопросы