You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AccessibilityService请求权限遇空指针,如何正确传入Activity参数?

AccessibilityService请求SYSTEM_ALERT_WINDOW权限问题排查

问题场景

我参考示例在AccessibilityService中请求权限,代码如下:

class MyAccessibilityService : AccessibilityService() {
  override fun onServiceConnected() {
    when (ContextCompat.checkSelfPermission(
      this as Context,
      Manifest.permission.SYSTEM_ALERT_WINDOW
    )) {
      PackageManager.PERMISSION_GRANTED -> {
        Log.v(TAG, "SYSTEM_ALERT_WINDOW")
      }
      else -> {
        // 直接请求权限
        requestPermissions(
          MainActivity(),
          arrayOf(Manifest.permission.SYSTEM_ALERT_WINDOW),
          0
        )
      }
    }
  }
}

报错信息

运行后触发空指针异常:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.freedom.android.debug, PID: 2716
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
        at android.content.ContextWrapper.getPackageManager(ContextWrapper.java:98)
        at android.app.Activity.requestPermissions(Activity.java:5273)
        at androidx.core.app.ActivityCompat$Api23Impl.requestPermissions(ActivityCompat.java:850)
        at androidx.core.app.ActivityCompat.requestPermissions(ActivityCompat.java:520)
        at com.freedom.android.service.MyAccessibilityService.onServiceConnected(MyAccessibilityService.kt:215)
        at android.accessibilityservice.AccessibilityService.dispatchServiceConnected(AccessibilityService.java:501)
        at android.accessibilityservice.AccessibilityService.access$100(AccessibilityService.java:220)
        at android.accessibilityservice.AccessibilityService$2.onServiceConnected(AccessibilityService.java:1625)
        at android.accessibilityservice.AccessibilityService$IAccessibilityServiceClientWrapper.executeMessage(AccessibilityService.java:1852)
        at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8668)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

疑问点

  • 正确的Activity参数传入方式是什么?
  • 这种场景下能不能使用MainActivity?
  • 如果不能用MainActivity该怎么处理?
  • 补充:当前使用Jetpack Compose,设备是Android 10。

尝试的初步方案(第一次编辑)

我创建了一个EmptyActivity:

class EmptyActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContent{
      Surface(
//        color = Color.Transparent
      ) {
        Text(
          fontSize = 50.sp,
          modifier = Modifier.padding(2.dp),
          text = "Hello World"
        )
      }
    }

//    requestPermissions(
//      arrayOf(Manifest.permission.SYSTEM_ALERT_WINDOW),
//      0
//    )
  }
}

在AndroidManifest.xml中配置:

<activity android:name=".EmptyActivity"></activity>

然后在AccessibilityService中启动这个Activity:

startActivity(Intent(this, EmptyActivity::class.java).addFlags(FLAG_ACTIVITY_NEW_TASK))        

内容的提问来源于stack exchange,提问作者SageJustus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:57:11