广播接收器不接收意图

时间:2014-03-27 07:10:44

标签: android android-intent broadcastreceiver

我的一项服务广播了一个意图。

public static final String WHATSAPP_INTENT = "com.timelinestudios.ourapp.WHATSAPPSHARER";
Intent sharerintent

...

 System.out.println("Sending intent");
sharerintent = new Intent(WHATSAPP_INTENT);
sharerintent.putExtra("TRACK_PATH", track.getPath());
getApplicationContext().sendBroadcast(sharerintent);
System.out.println("Intent Sent");

然后我放入接收器。

public class WhatsappSharer extends BroadcastReceiver {
public static final String WHATSAPP_INTENT = "com.timelinestudios.ourapp.WHATSAPPSHARER";
public WhatsappSharer() {
}

@SuppressLint("ShowToast")
@Override
public void onReceive(Context context, Intent intent) {
    // TODO: This method is called when the BroadcastReceiver is receiving
    // an Intent broadcast.
    System.out.println("Intent Received");
    if(intent.getAction().equals(WHATSAPP_INTENT)){
        System.out.println("Intent Received");
        Toast ts = Toast.makeText(context, "Ready to share to whatsapp",Toast.LENGTH_SHORT);
        ts.show();
    }
}

}

同样在Manifest中,我补充说,

<receiver
        android:name="com.timelinestudios.ourapp.WhatsappSharer"
        android:enabled="true"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.timelinestudios.ourapp.WHATSAPPSHARER"></action>
            <category android:name="android.intent.category.DEFAULT" /> 
        </intent-filter>
    </receiver>

在Logcat中,我从我的服务中获得2个系统printlns。 发送意图 意图已发送

但是接收器没有系统打印或烤面包。所以我猜,广播接收器没有得到它。可能是什么问题?

编辑:当在mainactivity中动态声明广播接收器时,它可以工作。奇怪的。为什么会这样?

3 个答案:

答案 0 :(得分:0)

在清单中更改接收者的姓名。您的接收者类名称与您在清单中提供的名称不同。

<receiver
        android:name=".WhatsappSharer"
        android:enabled="true"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.timelinestudios.ourapp.WHATSAPPSHARER"></action>
            <category android:name="android.intent.category.DEFAULT" /> 
        </intent-filter>
    </receiver>

答案 1 :(得分:0)

您是否从其他应用程序发送广播,而不是接收方所在的应用程序?

如果是这样,删除android:exported =“false”(或将其设置为true)。

当您向注册接收者添加意图过滤器时,默认情况下会将其导出,除非您将其明确设置为false。

答案 2 :(得分:0)

从AndroidManifest.xml中删除以下行:
<category android:name="android.intent.category.DEFAULT" />

此外,如果这样做不起作用,请尝试将导出设置为true