수색…


소개

알림 채널을 사용하면 앱 개발자가 알림을 그룹 채널로 그룹화 할 수 있습니다. 사용자는 전체 채널에 대한 알림 설정을 한 번에 수정할 수 있습니다. Android O에서는이 기능이 도입되었습니다. 이제 개발자가 미리 볼 수 있습니다.

통사론

  1. class NotificationUtils {} // 알림 채널 만들기
  2. createChannel () // 알림을 생성하는 일반적인 메소드

매개 변수

방법 기술
IMPORTANCE_MAX 미사용의
IMPORTANCE_HIGH 어디에서나 보여 주며, 소음과 엿보기를 만듭니다.
IMPORTANCE_DEFAULT 어디에서나 보여 주며, 소음을 만들어 주지만 시각적으로 방해하지 않습니다.
IMPORTANCE_LOW 모든 곳에서 보여 주지만 방해가되지는 않습니다.
IMPORTANCE_MIN 그늘에서 접은 부분 아래에만 보여줍니다.
IMPORTANCE_NONE 중요성이없는 통지; 그늘에 보이지 않는다.

알림 채널

알림 채널이란 무엇입니까?

알림 채널을 통해 Google 개발자는 알림을 그룹 채널로 그룹화 할 수 있습니다. 사용자는 전체 채널에 대한 알림 설정을 즉시 수정할 수 있습니다. 예를 들어 각 채널에 대해 사용자는 모든 알림을 완전히 차단하거나 중요도 수준을 무시하거나 알림 배지를 표시 할 수 있습니다. 이 새로운 기능은 앱의 사용자 환경을 크게 개선하는 데 도움이됩니다.

알림 채널 만들기

 import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Color;
 
public class NotificationUtils extends ContextWrapper {


private NotificationManager mManager;
public static final String ANDROID_CHANNEL_ID = "com.sai.ANDROID";
public static final String IOS_CHANNEL_ID = "com.sai.IOS";
public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL";
public static final String IOS_CHANNEL_NAME = "IOS CHANNEL";

public NotificationUtils(Context base) {
    super(base);
    createChannels();
}

public void createChannels() {

    // create android channel
    NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
            ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
    // Sets whether notifications posted to this channel should display notification lights
    androidChannel.enableLights(true);
    // Sets whether notification posted to this channel should vibrate.
    androidChannel.enableVibration(true);
    // Sets the notification light color for notifications posted to this channel
    androidChannel.setLightColor(Color.BLUE);
    // Sets whether notifications posted to this channel appear on the lockscreen or not
    androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);

    getManager().createNotificationChannel(androidChannel);

    // create ios channel
    NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID,
            IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
    iosChannel.enableLights(true);
    iosChannel.enableVibration(true);
    iosChannel.setLightColor(Color.GRAY);
    iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
    getManager().createNotificationChannel(iosChannel);


  }


private NotificationManager getManager() {
    if (mManager == null) {
        mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    }
    return mManager;
}}

위의 코드에서 우리는 notificationChannel의 두 인스턴스를 생성하여 uniqueid에 채널 이름과 해당 생성자의 중요도 수준을 전달했습니다. 각 알림 채널에 대해 다음 특성을 적용했습니다.

  1. 소리
  2. 진동
  3. 잠금 화면에 표시 할 알림.

마지막으로 시스템에서 NotificationManager를 가져온 다음 createNotificationChannel () 메서드를 호출하여 채널을 등록하고 생성 된 채널을 전달합니다.

createNotificationChannels ()로 한 번에 여러 알림 채널을 만들고 NotificationChannel 인스턴스의 Java 목록을 전달할 수 있습니다. getNotificationChannels ()을 사용하여 앱의 모든 알림 채널을 가져올 수 있으며 getNotificationChannel ()을 사용하여 채널 ID 만 인수로 전달하여 특정 채널을 가져올 수 있습니다.

알림 채널의 중요도

방법 기술
IMPORTANCE_MAX 미사용의
IMPORTANCE_HIGH 어디에서나 보여 주며, 소음과 엿보기를 만듭니다.
IMPORTANCE_DEFAULT 어디에서나 보여 주며, 소음을 만들어 주지만 시각적으로 방해하지 않습니다.
IMPORTANCE_LOW 모든 곳에서 보여 주지만 방해가되지 않으며, 값은 0입니다.
IMPORTANCE_MIN 그늘에서 접은 부분 아래에만 보여줍니다.
IMPORTANCE_NONE 중요성이없는 통지; 그늘에 보이지 않는다.

알림 생성 및 채널에 게시

우리는 NotificationUtils를 사용하여 NotificationBuilder를 사용하는 두 개의 알림을 만들었습니다.

public Notification.Builder getAndroidChannelNotification(String title, String body) {
    return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}
 
public Notification.Builder getIosChannelNotification(String title, String body) {
    return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}

Notification.Builder ()를 사용하여 NotificationChannel을 설정할 수도 있습니다.이 경우 setChannel (String channelId)을 사용할 수 있습니다.

알림 채널 설정 업데이트

알림 채널을 만들면 사용자가 설정 및 동작을 담당하게됩니다. createNotificationChannel ()을 다시 호출하여 기존 알림 채널의 이름을 바꾸거나 설명을 업데이트 할 수 있습니다. 다음 샘플 코드에서는 활동을 시작하기위한 의도를 작성하여 사용자를 알림 채널 설정으로 리디렉션하는 방법을 설명합니다. 이 경우 인 텐트에는 알림 채널의 ID 및 앱의 패키지 이름을 포함한 확장 된 데이터가 필요합니다.

@Override
protected void onCreate(Bundle savedInstanceState) {
    //...
    Button buttonAndroidNotifSettings = (Button) findViewById(R.id.btn_android_notif_settings);
    buttonAndroidNotifSettings.setOnClickListener(new View.OnClickListener() {
     
        @Override
        public void onClick(View view) {
            Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
            i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
            i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID);
            startActivity(i);
        }
    });
}

XML 파일 :

<!--...-->
<Button
    android:id="@+id/btn_android_notif_settings"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Notification Settings"/>
<!--...-->

알림 채널 삭제

deleteNotificationChannel ()을 호출하여 알림 채널을 삭제할 수 있습니다.

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
NotificationChannel mChannel = mNotificationManager.getNotificationChannel(id);
mNotificationManager.deleteNotificationChannel(mChannel);

MainActivity 및 xml 만들기

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_margin="16dp"
        tools:context="com.chikeandroid.tutsplusalerts.MainActivity">
 
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
 
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tuts+ Android Channel"
                android:layout_gravity="center_horizontal"
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
 
        <EditText
                android:id="@+id/et_android_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Title"/>
 
        <EditText
                android:id="@+id/et_android_author"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Author"/>
         
        <Button
                android:id="@+id/btn_send_android"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Send"/>
    </LinearLayout>
 
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginTop="20dp">
 
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tuts+ IOS Channel"
                android:layout_gravity="center_horizontal"
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
 
        <EditText
                android:id="@+id/et_ios_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Title"
                />
 
        <EditText
                android:id="@+id/et_ios_author"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Author"/>
        <Button
                android:id="@+id/btn_send_ios"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Send"/>
    </LinearLayout>
     
</LinearLayout>

MainActivity.java

MainActivity를 편집하여 EditText 구성 요소에서 제목과 작성자를 얻은 다음 Android 채널에 보낼 수 있습니다. NotificationUtils에서 만든 Android 채널 용 Notification.Builder를 가져온 다음 NotificationManager에 알립니다.

import android.app.Notification; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; android.text.TextUtils 가져 오기 import android.view.View; import android.widget.Button; import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
 
    private NotificationUtils mNotificationUtils;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mNotificationUtils = new NotificationUtils(this);
 
        final EditText editTextTitleAndroid = (EditText) findViewById(R.id.et_android_title);
        final EditText editTextAuthorAndroid = (EditText) findViewById(R.id.et_android_author);
        Button buttonAndroid = (Button) findViewById(R.id.btn_send_android);
 
        buttonAndroid.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String title = editTextTitleAndroid.getText().toString();
                String author = editTextAuthorAndroid.getText().toString();
 
                if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) {
                    Notification.Builder nb = mNotificationUtils.
                            getAndroidChannelNotification(title, "By " + author);
 
                    mNotificationUtils.getManager().notify(107, nb.build());
                }
            }
        });
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow