本地通知无法解决问题

问题描述 投票:-1回答:1
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Patient Name"
    android:id="@+id/nameET"/>

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Age"
    android:inputType="number"
    android:id="@+id/ageET" />

<Spinner
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:id="@+id/spinnerId" />

<Button
    android:layout_width="150dp"
    android:layout_height="50dp"
    android:layout_gravity="center_horizontal"
    android:text="Save"
    android:textColor="#ffff"
    android:background="@color/colorAccent"/>

<Button
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="Show notifications"
    android:id="@+id/btn" />

这是activity_main.xml

EditText nameET,ageET;
Spinner spinner;
Button login;
Button btn;
String[] genderArray = {"Male","Female"};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    nameET = findViewById(R.id.nameET);
    ageET = findViewById(R.id.ageET);
    spinner = findViewById(R.id.spinnerId);
    btn = findViewById(R.id.btn);

    ArrayAdapter arrayAdapter = new ArrayAdapter(MainActivity.this,android.R.layout.simple_spinner_dropdown_item,genderArray);
    arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(arrayAdapter);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            makeNotification();
        }
    });
}
public void makeNotification(){
    NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this)
            .setContentTitle("Hi")
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentText("Collect your daily coins");

    Intent intent = new Intent(MainActivity.this,MainActivity.class);

    PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

    builder.setContentIntent(pendingIntent);

    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(0,builder.build());
}

}这是MainActivity.java单击显示通知按钮时,我已将此代码用于不带Firebase的本地通知。它不起作用是什么问题以及如何解决。我找不到任何错误但输出不起作用任何人都可以解决我的问题,请查看并帮助我。

android android-studio sdk emulation
1个回答
0
投票

您的代码似乎不错。

很可能,您正在设备版本Oreo或更高版本上使用此代码。

您缺少在Oreo版本及更高版本上必须使用通知渠道的部分。

下面是将您的代码转换为适用于所有版本的代码段。

public class MainActivity extends AppCompatActivity {


    public static final String NOTIFICATION_CHANNEL_ID = "channel_id";
    public static final String CHANNEL_NAME = "Notification Channel";
    public static final int NOTIFICATION_ID = 101;
    NotificationManager notificationManager;


    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.btn);
        notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                createNotificationChannel();
                makeNotification();
            }
        });
    }

    private void createNotificationChannel() {

        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, CHANNEL_NAME, importance);

            notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
            notificationManager.createNotificationChannel(notificationChannel);
        }

    }

    public void makeNotification() {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, NOTIFICATION_CHANNEL_ID)
                .setContentTitle("Hi")
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentText("Collect your daily coins");

        Intent intent = new Intent(MainActivity.this, ActivityOne.class);

        PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        builder.setContentIntent(pendingIntent);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            builder.setGroup(NOTIFICATION_CHANNEL_ID);
        }

        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify(0, builder.build());
    }
}

请咨询此链接以获取有关通知渠道的详细信息。https://medium.com/exploring-android/exploring-android-o-notification-channels-94cd274f604c

© www.soinside.com 2019 - 2024. All rights reserved.