没有接收来自k9电子邮件的广播

时间:2011-05-26 15:17:38

标签: android email broadcastreceiver

我正在收听从k9收到的电子邮件,我似乎无法让它发挥作用。

我已注册以下内容:

com.fsck.k9.intent.action.EMAIL_RECEIVED

我想知道是否需要添加权限 - 我似乎无法接收此广播。

我知道我的接收器正在工作,因为我可以接收短信和电话的广播。有没有其他人使用过这个可能会对这个问题有所了解?

这是我的过滤器:

IntentFilter fltr = new IntentFilter();
fltr.addAction("android.provider.Telephony.SMS_RECEIVED");
fltr.addAction("com.fsck.k9.intent.action.EMAIL_RECEIVED");
fltr.addAction("android.intent.action.PHONE_STATE");
registerReceiver(mRcv, fltr);

在我的BroadcastReceiver中:

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String EMAIL_RECEIVED = "com.fsck.k9.intent.action.EMAIL_RECEIVED";
private static final String CALL_RECEIVED = "android.intent.action.PHONE_STATE";


public void onReceive( Context context, Intent intent ) { 
            Log.d(TAG, "Inside Broadcast Reciever");
            Log.d(TAG, "Action: " + intent.getAction());
            if(intent.getAction().equals(SMS_RECEIVED)) {
                StartAct("SMS Received", context);
            }else if(intent.getAction().equals(EMAIL_RECEIVED)){
                StartAct("Email received", context);
            }else if(intent.getAction().equals(CALL_RECEIVED)){
                if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING))
                    StartAct("Incoming Phone Call", context);
            }

        } 

2 个答案:

答案 0 :(得分:1)

我有工作 - 终于......

您必须将数据方案添加到intent过滤器。这将允许您接收广播。但它会破坏我在过滤器中的其他动作,所以我不得不将它们分成单独的接收器 - 一个用于短信和电话,另一个用于k9电子邮件广播。

以下是k9电子邮件的内容:

IntentFilter fltr = new IntentFilter();
fltr.addAction("com.fsck.k9.intent.action.EMAIL_RECEIVED");
fltr.addDataScheme("email"); //This is needed to even receive the broadcast
registerReceiver(mRcv, fltr);

答案 1 :(得分:0)

尝试查看实际的K9 source codeAndroidManifest显示了他们拥有的几项权限。尝试编译你的程序,它连接到eclipse并检查LogCat,如果缺少权限,它通常会显示在它的错误部分。我只看到他们创建的4个声明的权限,所以READ_MESSAGE是我的猜测,但检查logcat并看看它说的是什么。

不幸的是,看起来他们的文档缺乏相当多,这是一个该死的耻辱。