从监听去电的广播接收器中启动一个活动

7

我正在尝试从监听外拨电话的广播接收器启动一个活动,该广播接收器监听的电话号码是5556。问题是,该活动未被启动,反而调用了内置的拨号活动。我已将意图的优先级更改为100,但无济于事。如何使该活动在拨号时启动,而不是内置的拨打活动呢?以下是代码:

package com.messageHider;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class launchReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        String compare_num="5556";
        if(number.equals(compare_num))
        {
            Intent myintent=new Intent(context,messageHider.class);
            myintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(myintent);
            abortBroadcast();
        }
    }

}

清单文件:

<receiver android:name=".launchReceiver">
    <intent-filter android:priority="0">
        <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
    </intent-filter>
</receiver>

你最终解决了吗? - Zapnologica
2个回答

3

在你的清单文件中,根据文档要求,你需要一个权限:

你必须拥有“PROCESS_OUTGOING_CALLS”权限才能接收此意图。

以上就是所需内容。

"android.permission.PROCESS_OUTGOING_CALLS"

以下是直接从文档中摘录的内容:

任何接收到此 Intent 的 BroadcastReceiver 都不能中止广播。

这里是我获取信息的页面链接:

http://developer.android.com/reference/android/content/Intent.html


发送的意图是 android.intent.action.NEW_OUTGOING_CALL。该意图由系统发送。当您接收到它时,您将从意图数据中获取 EXTRA_PHONE_NUMBER,然后如果您想让您的应用程序处理呼叫,则需要将 resultData 设置为 null,或者您可以更改电话号码,系统将处理新号码。我已经有一段时间没有使用它了,但这就是我从文档中得到的。这有帮助吗?如果不是,您需要什么样的示例代码? - Reed

3

不要使用abortBroadcast()来中止广播,而是在启动您的活动后使用setResultData(null)来结束呼叫。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接