Локальные уведомления не работают, как это исправить - PullRequest
0 голосов
/ 01 апреля 2020
<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, когда я нажимаю show Кнопка уведомления. Не работает, что является проблемой и как ее решить. Я не могу найти никакой ошибки, но вывод не работает, кто-то может решить мою проблему, пожалуйста, посмотрите и помогите мне.

1 Ответ

0 голосов
/ 01 апреля 2020

Ваш код выглядит нормально.

Скорее всего, вы используете этот код на версии устройства 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

...