2012-03-29 4 views
-1

ich einen Dienst von meinem broadcastReceiver aktivieren wollen, dann ist dies mein Code, aber es hat nicht funktioniert:Wie kann ich einen Dienst von einem BroadcastReceiver aktivieren?

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

und das ist der 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; 
    } 
} 

Ich möchte nur den Service anrufen, wenn die Aktion der Sendung wird eingestellt

+0

isn't Ihr "Kontext" Feld leer? Ich würde versuchen, den Dienst über den Anwendungskontext stattdessen starten context.startService (neue Absicht (getApplicationContext(), Deletecontact.class)); – andreasg

+0

@emna: Verwenden Sie CTX anstelle von Kontext, um den Dienst zu starten. –

Antwort

0

@Emna, wenn ich sehe Code für den Start Service haben Sie diesen Code verwendet, um den Dienst zu starten.

context.startService(service); 

In diesem Code context diese zuweisen nicht wie unten

Also, bevor Sie startService

context=ctx; 

obigen Code hinzufügen nach onReceive nennen.

und stellen Sie sicher, dass Sie Deletecontact.class diese Klasse als Service-Tag in AndroidManifest.xml definieren Für das Beispiel unten:

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

Hoffnung dies funktionieren wird.

0

versuchen dies, Verwendung ctx statt Kontext für den Dienst starten und die Vorbereitung 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); 
}}}