Android广播接收器未接收到目标
我制作了两个应用程序,试图将意图从一个发送到另一个,但意图永远不会到达Android广播接收器未接收到目标,android,android-intent,intentfilter,android-broadcast,Android,Android Intent,Intentfilter,Android Broadcast,我制作了两个应用程序,试图将意图从一个发送到另一个,但意图永远不会到达onReceive()。第一个应用程序可以发送给第二个应用程序,但第二个应用程序无法发送回信息。我使用不同的意图动作从第二个发送到第一个,但在其他方面它们是相同的。你知道为什么这可能不起作用吗?我已经尝试了我能想到的一切,并且阅读了我能在这里找到的大部分帖子,但都没有用 它没有崩溃,也没有给我任何关于logcat中发生了什么的指示,只是什么都没做 发送函数 private void sendFinishLog(String I
onReceive()。第一个应用程序可以发送给第二个应用程序,但第二个应用程序无法发送回信息。我使用不同的意图动作从第二个发送到第一个,但在其他方面它们是相同的。你知道为什么这可能不起作用吗?我已经尝试了我能想到的一切,并且阅读了我能在这里找到的大部分帖子,但都没有用
它没有崩溃,也没有给我任何关于logcat中发生了什么的指示,只是什么都没做
发送函数
private void sendFinishLog(String ID, String Cond)
{
Log.d("me", "send finish log");
Intent logIntent = new Intent();
logIntent.putExtra("ID", ID);
logIntent.putExtra("Cond", Cond);
logIntent.setAction("com.me.intent.finishlog");
Log.d("me","logIntent : " + logIntent.toString()
+logIntent.getExtras().toString());
sendBroadcast(logIntent);
}
接班
public class LogReceiver extends BroadcastReceiver {
public static ArrayList<LogDataHolder> logData = new ArrayList<LogDataHolder>();
private boolean found;
static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
private static String lasttime;
private static String now = "Boot time";
@Override
public void onReceive(Context cont, Intent logIntent)
{
Log.d("me","On receive");
etc.....
}
公共类LogReceiver扩展了BroadcastReceiver{
public static ArrayList logData=new ArrayList();
发现私有布尔值;
静态SimpleDataFormat dateFormat=新SimpleDataFormat(“yyyy-MM-dd hh:MM:ss”);
上次私有静态字符串;
私有静态字符串now=“启动时间”;
@凌驾
接收时公共无效(上下文内容、意图登录内容)
{
Log.d(“我”、“收到时”);
等
}
接收应用程序清单
<!-- for receiving logs -->
<receiver
android:name = "LogReceiver"
android:enabled="true">
<intent_filter>
<action android:name="com.me.intent.finishlog" />
</intent_filter>
</receiver>
像这样重试。可能需要添加类别
<receiver
android:name = "LogReceiver"
android:enabled="true">
<intent-filter>
<action android:name="com.me.intent.finishlog" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
类似于:
public void onResume() {
IntentFilter filter = new IntentFilter();
getActivity().registerReceiver(mLogReceiver,filter);
}
联合国登记:
public void onPause() {
getActivity().unregsiterReceiver(mLogreceiver);
}
编辑:
我刚刚发现LogReceiver类也没有构造函数。您还需要编写一个:
private LogReceiver mLogReceiver = new LogReceiver() {
之后,您可以使用onReceive方法,就像您的代码中已经有了它一样。您在清单中声明了接收方为:
android:name = "LogReceiver"
该名称应为:
实现广播接收器的类的名称
BroadcastReceiver的子类。这应该是一个完全限定的类
名称(例如,“com.example.project.ReportReceiver”)。但是,作为
简写,如果名称的第一个字符是句点(用于
例如,“.ReportReceiver”),它被附加到包名之后
在元素中指定
换句话说,它需要包含包。请尝试将名称更改为:
android:name = ".LogReceiver"
或
当我从OnPause()中删除接收器注销时,我的问题就解决了.method.你注册了接收者吗?它不是同一个东西吗?我希望它一直在监听,这样我就可以在每次触发时拾取它,所以根据我的理解,清单方式是更好的选择。重写的onReceive方法必须在{}内我的最后一行。这对构造器也是有效的吗?不是100%确定它是这个还是所有答案的组合,但这已经让它工作了,所以谢谢你。我不确定为什么我需要这个,当我以前没有这个,但它工作了,这就是现在所有的问题。哈哈,至少你学会了,有时你只是需要坚持一个继续编码:-@bofredo你的方法不应该调用super.onResume()
和super.onPause()吗
?默认值是什么意思?它是指标准的android操作系统还是可用于自定义意图操作?如果不必添加操作,则无需添加类别。但如果添加操作,我认为有必要添加类别以指示如何使用此操作发布完整的项目。完整的项目>50000行因此,这不是一个真正的选项。然后创建一个只涉及接收者的小项目。
android:name = "com.me.yourpackagename.LogReceiver"