简体   繁体   中英

Android Kotlin: Required Context but found String

I am trying to create a method that schedules a notification. Within that method, I initialize an AlarmManager which will allow me to receive Intents on demand. However, I get the following syntax error in my code:

Type mismatch. Required: Context Found: String

On the following line:

 var alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager

Below is my code:

package com.example.notificationapp

import android.app.AlarmManager
import android.app.NotificationManager
import android.app.PendingIntent
import android.app.PendingIntent.getActivity
import android.content.Context
import android.content.Intent
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat.getSystemService
import java.security.AccessController.getContext
import java.util.*

// Channel

class Notification(context:Context, notificationManager: NotificationManager, title:String, description:String, date: Date) {
    // Attributes
    private lateinit var context:Context;
    private var title:String = ""
    private var description:String = ""
    private lateinit var date:Date;
    private lateinit var notificationManager:NotificationManager;

    // Initialization
    init {
        // Download the constructor parameters into the object's attributes
        this.context = context
        this.title = title
        this.description = description
        this.date = date
        this.notificationManager = notificationManager
    }

    // Method to set the notification at a specific time
    fun setNotificationAtTime(time:Date) {
        var notificationIntent = Intent(this.context, NotificationBroadcast::class.java)
        var pendingNotificationIntent = PendingIntent.getBroadcast(this.context,
            0, notificationIntent, 0)

        // Initialize an AlarmManager that allows us to receive intents on demand
        var alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager

        val builder = NotificationCompat.Builder(context, "com.example.notificationapp")
    }
}

It's because you are using ContextCompat.getSystemService instead of Context.getSystemService .

So you have two options here:

  1. Use ContextCompat.getSystemService using the right signature:
getSystemService(context, AlarmManager::class.java)
  1. Use Context.getSystemService removing the import statement:
androidx.core.content.ContextCompat.getSystemService

add requireActivity() before the call to getSystemService()

val alarmManager = requireActivity().getSystemService(Context.ALARM_SERVICE) as AlarmManager

2023 solution:

// for NotificationManager
val alarmManager = getSystemService(requireContext(), NotificationManager::class.java)

// for InputMethodManager
val imm = getSystemService(requireContext(), InputMethodManager::class.java)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM