IntentService将广播发送到Receiver,但它不会调用onReceive()

时间:2019-07-16 10:14:33

标签: android

我正在尝试从我的MainActivity向服务发送一个意图,然后从该服务开始向BroadcastReceiver广播一个意图。第一个意图被激发,并被服务接收。服务中的广播意图已被激发,但未被BroadcastReceiver接收

以下是我所做的:

  • 配置AndroidManifest.xml以获取服务和接收方的详细信息
  • 在服务中注册BroadcastReceiver

BroadcastReceiver代码:

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "Inside onReceive of myReceiver: " + intent.getAction());
        if (intent.getAction() == "com.utils.myapp.MY_STUFF")
        {
           // Do something here
        }
    }

服务代码:

public class MyService extends IntentService {
    private static BroadcastReceiver myReceiver = new MyReceiver();

...

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.i(TAG, "Inside onHandleIntent() of service");
        String action = intent.getStringExtra("ACTION");
        Log.i(TAG, "ACTION: " + action);
        if (action == "FIRE_INTENT_TO_RECEIVER")
        {
            Intent rec_intent = new Intent("com.utils.myapp.MY_STUFF");
            sendBroadcast(rec_intent);
        }
    }

在主要活动中:


        Intent serviceIntent = new Intent(this, MyService.class);
        serviceIntent.putExtra("ACTION", "FIRE_INTENT_TO_RECEIVER");
        this.startService(serviceIntent);

AndroidManifest.xml:


       <service
            android:name=".MyService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="FIRE_INTENT_TO_RECEIVER" />
            </intent-filter>
        </service>

       <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true"
            android:priority="2147483647">
            <intent-filter>
                <!-- Some actions here-->
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

预期结果:应该达到BroadcastReceiver中的onReceive() 实际结果:未达到onReceive()

1 个答案:

答案 0 :(得分:0)

我猜该错误正在发生,因为您正在发送隐式意图(您未将MyReceiver.class指定为广播目标)。另外,您必须在com.utils.myapp.MY_STUFF中注册动作AndroidManifest.xml

发送广播:

Intent rec_intent = new Intent(this, MyReceiver.class);
rec_intent.setAction("com.utils.myapp.MY_STUFF");
sendBroadcast(rec_intent);

AndroidManifest.xml

<receiver
    android:name=".MyReceiver"
    android:enabled="true"
    android:exported="true"
    android:priority="2147483647">
    <intent-filter>
        <action android:name="com.utils.myapp.MY_STUFF" /> <!-- Add this line -->
    </intent-filter>
</receiver>