Java Android:初始化意图时找不到类的符号

Java Android:初始化意图时找不到类的符号,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,我正在编写一个简单的Android程序,它使用一个扩展Android的BroadcastReceiver的类来初始化Intent。但是,当我运行程序时,我收到以下错误: C:\Users\windows\AndroidStudioProjects\NotificationTest\app\src\main\java\com\example\notificationtest\MainActivity.java:60: error: cannot find symbol Intent

我正在编写一个简单的Android程序,它使用一个扩展Android的
BroadcastReceiver
的类来初始化
Intent
。但是,当我运行程序时,我收到以下错误:

C:\Users\windows\AndroidStudioProjects\NotificationTest\app\src\main\java\com\example\notificationtest\MainActivity.java:60: error: cannot find symbol
        Intent notificationIntent = new Intent(this, MatchNotification.class);
                                                     ^
  symbol:   class MatchNotification
  location: class MainActivity
1 error
考虑到我在
MainActivity
相同的文件夹中明确定义了MatchNotification,这似乎有些奇怪。以下是我的
main活动
课程:

package com.example.notificationtest;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent notificationIntent = new Intent(this, MatchNotification.class);
    }
}
package com.example.notificationtest

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.media.MediaPlayer
import android.media.RingtoneManager
import android.net.Uri

class MatchNotification : BroadcastReceiver() {
    private lateinit var player: MediaPlayer;
    private lateinit var context: Context;

    override fun onReceive(context: Context, intent: Intent) {
        this.context = context

        // Retrieve the URI of the alarm the user has set
        var ringtoneUri:Uri? = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
        player = MediaPlayer.create(context, ringtoneUri)
        player.start()
    }
}
下面是我的
MatchNotification
课程:

package com.example.notificationtest;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent notificationIntent = new Intent(this, MatchNotification.class);
    }
}
package com.example.notificationtest

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.media.MediaPlayer
import android.media.RingtoneManager
import android.net.Uri

class MatchNotification : BroadcastReceiver() {
    private lateinit var player: MediaPlayer;
    private lateinit var context: Context;

    override fun onReceive(context: Context, intent: Intent) {
        this.context = context

        // Retrieve the URI of the alarm the user has set
        var ringtoneUri:Uri? = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
        player = MediaPlayer.create(context, ringtoneUri)
        player.start()
    }
}
下面是我的
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.notificationtest">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".MatchNotification"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

发送一个
意图
更像这样:

Intent intent = new Intent();
intent.setAction("com.example.notificationtest.ON_MATCH");
intent.putExtra("data", "Nothing to see here, move along.");
sendBroadcast(intent);
这需要在
接收器中添加相应的
意图过滤器

<receiver
    android:name="com.example.notificationtest.MatchNotification"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        ...
        <action android:name="com.example.notificationtest.ON_MATCH" />
    </intent-filter>
</receiver>

...

同时运行
:lint
,然后修复它可能抱怨的所有Kotlin互操作性问题。

我应该用MatchNotification替换ON_MATCH,对吗?如果这是正确的,我可能会这样写;只需将
intent过滤器
添加到
接收器
。意图操作与映射的类名完全无关;你可以叫它任何你喜欢的名字,除了已经采取行动的名字。我的意思是,如果仅限于类名,那么每个
意图过滤器都需要一个额外的
接收器
,这是没有意义的。