2012-03-29 3 views
-1

Я хочу, чтобы активировать услугу из 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; 
    } 
} 

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

+0

не правда ваше поле «контекст» пустым? Я попытался бы запустить службу через контекст приложения вместо context.startService (новый Intent (getApplicationContext(), Deletecontact.class)); – andreasg

+0

@emna: используйте ctx вместо контекста, чтобы начать сервис. –

ответ

0

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

context.startService(service); 

В этом коде context это не назначайте как ниже

Поэтому, прежде чем позвонить startService

context=ctx; 

Добавить выше код после onReceive.

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

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

Надеется, что это будет работать.

0

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

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