无法将Builder中的Builder(Context)应用于(Context,java.lang.String)

时间:2019-02-11 16:35:33

标签: java android android-notifications

我有这个错误

Builder(Context)in Builder cannot be applied to (Context, java.lang.String)

在此行上

`final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext, CHANNEL_ID);`

我的build.gradle

compileSdkVersion 27
buildToolsVersion '27.0.3'
defaultConfig {
    applicationId "com.whrsmxmx.vk_api_test"
    minSdkVersion 22
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

我该如何更正此代码?如果我清除频道,则通知会发出,有声音,但状态栏中没有弹出窗口。

2 个答案:

答案 0 :(得分:0)

public class App extends Application {
public static final String CHANNEL_1_ID = "channel1";
public static final String CHANNEL_2_ID = "channel2";

@Override
public void onCreate() {
    super.onCreate();

    createNotificationChannels();
}

private void createNotificationChannels() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel1 = new NotificationChannel(
                CHANNEL_1_ID,
                "Channel 1",
                NotificationManager.IMPORTANCE_HIGH
        );
        channel1.setDescription("This is Channel 1");

        NotificationChannel channel2 = new NotificationChannel(
                CHANNEL_2_ID,
                "Channel 2",
                NotificationManager.IMPORTANCE_LOW
        );
        channel2.setDescription("This is Channel 2");

        NotificationManager manager = getSystemService(NotificationManager.class);
        manager.createNotificationChannel(channel1);
        manager.createNotificationChannel(channel2);
    }
   }
}

活动

public class MainActivity extends AppCompatActivity {
private NotificationManagerCompat notificationManager;
private EditText editTextTitle;
private EditText editTextMessage;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    notificationManager = NotificationManagerCompat.from(this);

    editTextTitle = findViewById(R.id.edit_text_title);
    editTextMessage = findViewById(R.id.edit_text_message);
}

public void sendOnChannel1(View v) {
    String title = editTextTitle.getText().toString();
    String message = editTextMessage.getText().toString();

    Notification notification = new NotificationCompat.Builder(this, CHANNEL_1_ID)
            .setSmallIcon(R.drawable.ic_one)
            .setContentTitle(title)
            .setContentText(message)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setCategory(NotificationCompat.CATEGORY_MESSAGE)
            .build();

    notificationManager.notify(1, notification);
}

public void sendOnChannel2(View v) {
    String title = editTextTitle.getText().toString();
    String message = editTextMessage.getText().toString();

    Notification notification = new NotificationCompat.Builder(this, CHANNEL_2_ID)
            .setSmallIcon(R.drawable.ic_two)
            .setContentTitle(title)
            .setContentText(message)
            .setPriority(NotificationCompat.PRIORITY_LOW)
            .build();

    notificationManager.notify(2, notification);
   }
}

清单文件 确保将android:name:".App"添加到应用程序级别清单中。

<?xml version="1.0" encoding="utf-8"?>

<application
    android:name=".App"   <!-- Add this line to your manifest -->
    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>
</application>

答案 1 :(得分:0)

它与“ com.android.support:appcompat”的版本有关。

只需将配置更改为compile 'com.android.support:appcompat-v7:27.+' 在文件build.gradle

您可能还需要添加一些配置。 喜欢:

    repositories {
         jcenter()
         mavenCentral()
         maven{url "https://maven.google.com"}
    }