15

我制作了两个应用程序,并试图将意图从一个发送到另一个,但意图永远不会到达,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.....
    }

接收应用清单

<!-- for receiving logs  -->
<receiver 
    android:name = "LogReceiver"
    android:enabled="true">
    <intent_filter>
        <action android:name="com.me.intent.finishlog" />
    </intent_filter>
</receiver>
4

4 回答 4

9

就像是:

public void onResume() {
    IntentFilter filter = new IntentFilter();
    getActivity().registerReceiver(mLogReceiver,filter);
}

并取消注册:

public void onPause() {
    getActivity().unregsiterReceiver(mLogreceiver);
}

编辑: 我只是想你的 LogReceiver 类也没有构造函数。你还需要写一个:

private LogReceiver mLogReceiver = new LogReceiver() {

之后,您可以像在代码中一样使用 onReceive 方法。

于 2013-08-15T14:26:17.583 回答
4

像这样再试一次。可能需要添加类别

<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>
于 2013-08-15T14:24:41.790 回答
2

当我从 OnPause() 中移除接收器注销时,我的问题就解决了。方法。

于 2017-08-16T08:22:17.707 回答
1

您将清单中的接收者声明为:

    android:name = "LogReceiver"

文档指出该名称应为:

实现广播接收器的类的名称,BroadcastReceiver 的子类。这应该是一个完全限定的类名(例如,“com.example.project.ReportReceiver”)。但是,作为简写,如果名称的第一个字符是句点(例如,“.ReportReceiver”),则将其附加到元素中指定的包名称中。

换句话说,它需要包含包。尝试将名称更改为:

    android:name = ".LogReceiver"

或者

    android:name = "com.me.yourpackagename.LogReceiver"
于 2013-08-16T03:41:24.060 回答