我无法从BroadcastReceiver获取startService

时间:2011-12-10 13:34:19

标签: java android service android-intent broadcastreceiver

当我的BroadcastReceiver触发警报时,我正在尝试启动我的服务。我没有收到任何错误,代码运行,但它没有启动我的服务,我没有得到任何错误。这可能是我的服务或清单中的问题吗?

我注意到,在Intent和Contexts方面,我经常遇到问题。我试图阅读它,但我找不到一个能以一种好的方式解释它的网站。有什么建议吗?

public class Alarm extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(1000);

        Intent myService = new Intent(BackgroundService.class.getName());
        context.startService(myService); 
    }
}

****************** 清单*******

<service android:name=".BackgroundService" android:process=":remote">
    <intent-filter>
    <action android:name="se.davidsebela.ShutMeUp.BackgroundService" />
    </intent-filter>
</service>

<receiver  android:process=":remote" android:name="Alarm"></receiver>
</application>

2 个答案:

答案 0 :(得分:2)

Intent myService = new Intent(BackgroundService.class.getName());

这只会通过一个动作创建一个新意图。该操作是BackgroundService类的名称。当您使用startService()时,这将无效。

而是使用获取类和上下文作为参数的intent构造函数:

Intent myService = new Intent(context, BackgroundService.class);

答案 1 :(得分:0)

得到它: - 有点儿。现在我知道了这个问题。您建议的代码有效。

Intent myService = new Intent(context, TestService.class);
context.startService(myService);

但问题是我的服务已在运行。我以为它被杀了,但只有计时器停止了,服务仍在运行。因此,当执行上面的两行时,它基本上没有任何剂量。

现在我必须找出如何真正杀死它:)