質問: PendingIntent.getBroadcast(this, 0, intent, 0) . . で正常にビルド可能ですが、 □ kotlin(Dialog.kt ... 別ファイル) で使用するとエラーが出力されます。 ### 試したこと 正常に使用出来たいる MainActivity.kt と比較して相違点などを挿入しても同じ結果です。 ### 補足情報(FW/ツールのバージョンなど) 開発環境は、AndroidStudio 3.1.3 以上、本当に初心者でお手数をお掛けしますが、よろしくお願い申し上げます。
回答: getSystemService()は、AppCompatActivityクラスの親(スーパークラス)であるContextクラスが持っているメソッドです。Dialog.ktに記述したクラスは恐らくContextクラス(またはそのサブクラス)を継承していないのでしょう。ですから、そのままではgetSystemService()を呼び出すことはできません。 Dialog.ktがどういう設計なのかわかりませんが、自分で作成したMainActivity(これもContextクラスのサブクラスの一種となる)のインスタンスを参照できる値を、Dialog.ktに記述したクラスのコンストラクターに渡し、その渡された変数を参照してgetSystemService()を呼び出せば解決できると思われます。具体的には、 MainActivity.kt ``` class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // コンストラクターの引数として、MainActivity自身のインスタンスを渡す val dialog = Dialog(this) } } ``` Dialog.kt ``` // プライマリーコンストラクターでcontextという変数にContext型の値を受け取る // このcontextはMainActivityのインスタンスを指している class Dialog(private val context: Context) { func() { // 下記はエラー。質問はこういう状況と思われる。 // DialogクラスはContextクラスと継承関係を何も持たないので、getSystemService()と // いうメソッドが何者かを知らない。よって名前解決できない(unresolv)。 val services1 = getSystemService(Context.ALARM_SERVICE) as AlarmManager // 変数contextのメソッドとしてgetSystemService()を呼び出している。 // contextはContext型なので、そのメソッドにgetSystemService()を持っているので // これならばエラーにはならない。 val services2 = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager // 以下略 } } ``` こんな感じにすることになると思います。