applicationContext.getSystemService(SmsManager::class.java) 在服务内返回 null

Exp*_*n't 3 null android android-service kotlin system-services

到目前为止查看了很多类似的问题,但最终没有一个解决方案。

我正在尝试启动前台服务来处理短信。该服务在应用程序首次打开时启动,并通过 kotlin 协程在后台线程上工作。即使应用程序已关闭,此进程仍保持活动状态。

我不太熟悉各种上下文,但我认为 applicationContext 将在应用程序的生命周期中存在,但我为获取 SmsManager 所做的调用返回 null,因此无论应用程序是否打开都是无用的。

主要活动中调用服务:

val textServiceIntent = Intent(this@MainActivity, TextManager::class.java) 
applicationContext.startForegroundService(textServiceIntent)
Run Code Online (Sandbox Code Playgroud)

调用 getSystemService,返回 null:

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
 val sms = applicationContext.getSystemService(SmsManager::class.java)
}
Run Code Online (Sandbox Code Playgroud)

注意:我也尝试将其放入 onCreate() 中,其中调用 super.onCreate() ,同样的问题。

是否有其他方法可以获取上下文来访问 SmsManager 或服务进程内的任何其他系统服务?

从首次调用的主要活动中传递上下文是否明智,因为该服务将比打开的应用程序更持久?

Mer*_*ost 7

如果您的目标 SDK < 31 (S),请使用它

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    applicationContext.getSystemService<SmsManager>(SmsManager::class.java)
} else {
    SmsManager.getDefault()
}
Run Code Online (Sandbox Code Playgroud)