我制作了两个应用程序,并尝试将一个意图从一个发送到另一个但是意图永远不会到达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>
答案 0 :(得分:7)
类似的东西:
public void onResume() {
IntentFilter filter = new IntentFilter();
getActivity().registerReceiver(mLogReceiver,filter);
}
和取消注册:
public void onPause() {
getActivity().unregsiterReceiver(mLogreceiver);
}
修改强> 我只想到你的LogReceiver类也没有构造函数。你需要写一个:
private LogReceiver mLogReceiver = new LogReceiver() {
之后你可以使用onReceive方法,就像你已经在代码中使用它一样。
答案 1 :(得分:4)
像这样再试一次。可能需要添加类别
<!-- for receiving logs -->
<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>
答案 2 :(得分:1)
您在清单中将接收者声明为:
android:name = "LogReceiver"
名称应为documentation的状态:
实现广播接收器的类的名称,a BroadcastReceiver的子类。这应该是一个完全合格的类 name(例如“com.example.project.ReportReceiver”)。但是,作为一个 简写,如果名称的第一个字符是句号(for 例如,“。ReportReceiver”),它被附加到包名称 在元素中指定。
换句话说,它需要包括包。尝试将名称更改为:
android:name = ".LogReceiver"
或
android:name = "com.me.yourpackagename.LogReceiver"
答案 3 :(得分:1)
当我从OnPause()移除接收器取消注册时,我的问题得以解决。方法