Как я могу активировать услугу из вещательного приемника? - PullRequest
0 голосов
/ 29 марта 2012

Я хочу активировать службу из моего broadcastReceiver, это мой код, но он не работает:

public class PackageChangeReceiver extends BroadcastReceiver {
Context context;
Deletecontact delete= new Deletecontact();
@Override
public void onReceive(Context ctx, Intent intent) {
Uri uri = intent.getData();
String pkg = uri != null ? uri.getSchemeSpecificPart() : null;
if(intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")&&   pkg.equals("com.alarm"))
{Log.i("action","the package is removed");
Intent service = new Intent( context, Deletecontact.class);
context.startService(service);
}}}

и это услуга

     public void onCreate()
  {

     //deletecontact();
 super.onCreate();
 }

    @Override
 public int onStartCommand(Intent intent, int flags, int startId)
 {
    return START_STICKY;
 //return super.onStartCommand(intent, flags, startId);
 }

 @Override
 public void onDestroy()
 {
 super.onDestroy();
 }
@Override
public IBinder onBind(Intent arg0) {
    return mBinder;
}

public class MyBinder extends Binder {
    Deletecontact getService() {
        return Deletecontact.this;
    }
}

Я просто хочу позвонить в службу, когда установлено действие трансляции

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

попробуйте это, используйте ctx вместо контекста для запуска службы и подготовки намерения:

public class PackageChangeReceiver extends BroadcastReceiver {
Context context;
Deletecontact delete= new Deletecontact();
@Override
public void onReceive(Context ctx, Intent intent) {
Uri uri = intent.getData();
String pkg = uri != null ? uri.getSchemeSpecificPart() : null;
if(intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")&&   pkg.equals("com.alarm"))
{Log.i("action","the package is removed");
Intent service = new Intent(ctx, Deletecontact.class);
ctx.startService(service);
}}}
0 голосов
/ 29 марта 2012

@ Эмна, когда я вижу ваш код для запуска службы, вы использовали этот код для запуска службы.

context.startService(service);

В этом коде context это не присваивается, как показано ниже

Так что прежде чем звонить startService

 context=ctx;

Добавьте указанный выше код после onReceive.

И убедитесь, что вы определили Deletecontact.class этот класс как служебный тег в AndroidManifest.xml. Пример ниже:

<service android:enabled="true" android:name="xxx.yyy.zzz.Deletecontact"
         ></service>

Надеюсь, это сработает.

...