【问题标题】:launching an activity from a broadcast receiver that listens to outgoing call从监听传出呼叫的广播接收器启动活动
【发布时间】:2023-03-27 17:43:01
【问题描述】:

我正在尝试从广播接收器启动一个活动,该接收器监听拨出呼叫,即 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>

【问题讨论】:

  • 你来对了吗?

标签: android broadcastreceiver


【解决方案1】:

在您的清单中,您需要一项权限(根据文档):

您必须拥有 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。意图由系统发送。当你收到它时,你会从intent数据中得到EXTRA_PHONE_NUMBER,然后你需要将resultData设置为null,如果你想让你的应用处理电话,或者你可以更改电话号码,系统会处理新号码。我有一段时间没有使用它,但这就是我从文档中得到的。这有帮助吗?如果没有,您到底想要什么示例代码?
【解决方案2】:

而不是使用 abortBroadcast() 中止广播;启动活动后使用 setResultData(null) 结束通话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多