首页 > 解决方案 > 如何在 Java 中从 CallScreeningService 开始活动

问题描述

当传入的电话号码与某些号码匹配时,我正在尝试打开编写此 CallScreeningService 的应用程序。在这种情况下,onScreenCall 调用中的 if 语句运行但 Activity 未启动。我不知道为什么,我猜这是因为我没有正确的应用程序上下文。有谁知道我将如何获得正确的上下文或我在这里做错了什么?

public class CallScreenService extends CallScreeningService {
Context nContext = this; 

@Override
public void onScreenCall(Call.Details callDetails) {

   if (callDetails.getHandle().toString().equals("tel:333333333")) {

        Intent i = new Intent(nContext, MainActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        nContext.startActivity(i);
    
   } 
}
}

标签: javaandroid

解决方案


该应用需要在 Android 10+ 上获得用户授予的 SYSTEM_ALERT_WINDOW 权限。

您必须将其添加到清单中:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

并向用户请求:

// Show alert dialog to the user saying a separate permission is needed
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);

推荐阅读