2012-03-29 30 views
-1

我想从我的BroadcastReceiver启动服务,这是我的代码,但它不工作:如何从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

isn't你的“上下文”字段为空? 我会尝试通过应用程序上下文来启动服务 context.startService(new Intent(getApplicationContext(),Deletecontact.class)); – andreasg 2012-03-29 11:30:26

+0

@emna:使用ctx代替上下文来启动服务。 – 2012-03-29 11:33:56

回答

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代替上下文启动服务和准备意图:

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