Я пытаюсь преобразовать приведенный ниже код из Java в Kotlin.
public class CreateShortcut extends Activity {
class WaitFor extends AsyncTask<Void,Void,Void> {
final int waitPeriod;
private WaitFor (int N) {
this.waitPeriod = N * 1000;
}
@Override
protected Void doInBackground(Void... voids) {
try {
Thread.sleep(waitPeriod);
Intent bi = new Intent(shortcutId);
bi.putExtra("msg", "deny");
sendBroadcast(bi);
}
catch (InterruptedException ignore) {
}
return null;
}
}
...
Это преобразованный Kotlin.
class CreateShortcut : AppCompatActivity() {
private class WaitFor (N: Int) : AsyncTask<Void, Void, Void>() {
val waitPeriod: Int = N * 1000
override fun doInBackground(vararg voids: Void): Void? {
try {
Thread.sleep(waitPeriod.toLong())
val bi = Intent(shortcutId)
bi.putExtra("msg", "deny")
sendBroadcast(bi)
} catch (ignore: InterruptedException) { /* Ignore */ }
return null
}
}
Моя проблема заключается в том, что sendBroadcast в коде Kotlinявляется неразрешенной ссылкой.
sendBroadcast определен в контексте, и если я изменю эту строку кода так:
(this as CreateShortcut).sendBroadcast(bi)
Линт предупреждает, что «приведение никогда не может быть успешным», но кодработает просто отлично.
Я попробовал квалифицированное this (то есть this @ CreateShortcut), и @CreateShortcut появляется нерешенным. Также только this.sendBroadcast (намерение) также не разрешен.
Примеры получателей широковещательной рассылки Kotlin, которые я нашел в Интернете, просто используют неквалифицированный "sendBroadcast", но обычно они просто вызывают из функций в классе активности и не вызываютиз внутреннего класса в деятельности.
Я застрял. Любые предложения ??
Спасибо Стив С.