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"