当我只有可选上下文时,如何创建意图?

时间:2019-07-15 10:48:16

标签: android android-intent kotlin

在以下代码中(应在启动时启动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,所以我一无所知。

3 个答案:

答案 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)
    }
}