我的一项服务广播了一个意图。
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中动态声明广播接收器时,它可以工作。奇怪的。为什么会这样?
答案 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