在以下代码中(应在启动时启动MainActivity):
class autostart : BroadcastReceiver() {
companion object {
val TAG = "myapp-autostart"
}
override fun onReceive(context: Context?, intent: Intent?) {
Log.d(TAG, "context: $context, intent: $intent")
if (context != null) {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
}
}
}
我得到了错误:
None of the following functions can be called with the arguments supplied:
public constructor Intent(p0: Context!, p1: Class<*>!) defined in android.content.Intent
public constructor Intent(p0: String!, p1: Uri!) defined in android.content.Intent
我假设这与上下文是一个“上下文?”有关,但是到目前为止我已经写了15分钟的Kotlin,所以我一无所知。
答案 0 :(得分:3)
您的代码中有一个小错误:在检查context
参数时,您仍在将this
传递到Intent()
中。更改您的代码以改为使用context
。
override fun onReceive(context: Context?, intent: Intent?) {
Log.d(TAG, "context: $context, intent: $intent")
if (context != null) {
val intent = Intent(context, MainActivity::class.java)
intent.addFlags(FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent)
}
}
此外,您有两个名为intent
的变量(参数和方法变量),可以不同地调用它们,以免错误地使用其他变量。
答案 1 :(得分:0)
尝试一下: 它启动定义为启动器活动的活动:
val launchIntent = context.packageManager.getLaunchIntentForPackage(APP_PACKAGE_NAME)
if (launchIntent != null) {
context.startActivity(launchIntent)
}
答案 2 :(得分:0)
您可以尝试
override fun onReceive(context: Context?, intent: Intent?) {
Log.d(TAG, "context: $context, intent: $intent")
if (context != null) {
val intent = Intent(context.getApplicationContext(), MainActivity::class.java)
startActivity(intent)
}
}
或
不知道它是否可以在BroadcastReceiver中工作
override fun onReceive(context: Context?, intent: Intent?) {
Log.d(TAG, "context: $context, intent: $intent")
if (context != null) {
val intent = Intent(getApplicationContext(), MainActivity::class.java)
startActivity(intent)
}
}