Android 알림이 표시되지 않음


115

Android에 알림을 추가 할 프로그램이 필요합니다. 누군가 알림을 클릭하면 두 번째 활동으로 연결됩니다.

코드를 설정했습니다. 알림이 작동해야하지만 어떤 이유로 작동하지 않습니다. 는 Notification전혀 표시되지 않습니다. 내가 뭘 놓치고 있는지 모르겠다.

해당 파일의 코드 :

Notification n = new Notification.Builder(this)
        .setContentTitle("New mail from " + "test@gmail.com")
        .setContentText("Subject")
        .setContentIntent(pIntent).setAutoCancel(true)
        .setStyle(new Notification.BigTextStyle().bigText(longText))
        .build();

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected

notificationManager.notify(0, n);

질문 할 때 더 간결하게하십시오. 당신은 언급하지 무엇을 작동하지 않습니다. 사실, 당신은 무언가가 작동하지 않는다고 언급하지도 않습니다. 는 IS Activity시작하지? 는 Notification표시되지?
slinden77 2013

3
@dmmh 나는 내 질문에서 내 문제가 무엇이라고 말했다! 그리고 나는 질문에서 잘못된 것을 찾지 못했습니다. 내 질문은 문제에 대해 구체적이었습니다. 전문가가 아니라면 찌를 필요가 없습니다! 그리고 tato469의 대답은 좋았습니다.
Choudhury AM

3
이 사이트의 목적은 문제를 해결하는 것이 아니라 다른 사람들이 문제에 대한 해결책을 찾을 수 있도록하는 것임을 지적하고 있습니다. 나는 찌르지 않는다. 나는 당신의 감정을 상하게해서 미안하지만 사실은 당신의 질문이 틀렸고 대답이 틀렸다는 것입니다. 그리고이 모든 오해의 소지가있는 정보는 당신이 설명하는 것과 같은 문제를 가지고 작동하지 않는 해결책을 시도하는 다른 초보 프로그래머로 이어질 것입니다 제공 한 코드를 기반으로합니다. 내가 전문가인지 아닌지 여부는 관련이 없거나 관련이 없습니다. 특히 내가 옳지 않기 때문에 질문이 모호하고 다른 답변이 잘못되었습니다.
slinden77

오해의 소지가 있으므로이 질문과 답변을 제거해달라고 요청하겠습니다. 좋은 하루 되세요.
slinden77

1
사람들이 문제가 무엇인지 이해할 수 있도록 질문을 변경했습니다.
Choudhury AM

답변:


412

아이콘 없이는 코드가 작동하지 않습니다. 따라서 setSmallIcon작동하려면 다음과 같이 빌더 체인에 호출을 추가하십시오 .

.setSmallIcon(R.drawable.icon)

Android Oreo (8.0) 이상

안드로이드 8은 설정의 새로운 요구 사항 소개 channelId를 사용하여 속성을 NotificationChannel.

private NotificationManager mNotificationManager;

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);

NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
bigText.bigText(verseurl);
bigText.setBigContentTitle("Today's Bible Verse");
bigText.setSummaryText("Text in detail");

mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
mBuilder.setContentTitle("Your Title");
mBuilder.setContentText("Your text");
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setStyle(bigText);

mNotificationManager =
    (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

// === Removed some obsoletes
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
    String channelId = "Your_channel_id";
    NotificationChannel channel = new NotificationChannel(
                                        channelId,
                                        "Channel human readable title",
                                        NotificationManager.IMPORTANCE_HIGH);
   mNotificationManager.createNotificationChannel(channel);
  mBuilder.setChannelId(channelId);
}

mNotificationManager.notify(0, mBuilder.build());

CHANNEL_ID를 얻는 방법? 도와주세요
Ananta Prasad

@LAnantaPrasad CHANNEL_ID는 귀하를위한 식별자입니다. 채팅 대화 또는 그룹 채팅과 같이 알림을 그룹화하는 방법입니다.
케이시 다니엘

감사 setChannelId합니다. 추가하기 전에 알림이 내 SONY 기기에는 표시되지만 삼성 기기에는 표시되지 않습니다.
Wesely


2
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ mBuilder.setChannelId(channelId); }이 검사가 없으면 장치 API> = 26 인 경우에도 알림이 표시되지 않으므로 검사도 포함합니다 .
Koushik Shom Choudhury

58

실제로 ƒernando Valle의 대답은 정확 하지 않은 것 같습니다. 다시 말하지만, 귀하의 질문은 무엇이 잘못되었거나 작동하지 않는지 언급하지 않았기 때문에 지나치게 모호합니다.

귀하의 코드를 보면 Notification단순히 표시되지 않는다고 가정합니다 .

아이콘을 제공하지 않았기 때문에 알림이 표시되지 않습니다. SDK 문서에 필수라고 언급되어 있지 않지만 실제로는 매우 그렇기 때문에 Notification하나 없이는 표시되지 않습니다.

addAction4.1부터 만 사용할 수 있습니다. 이전에 당신은을 사용하는 것이 PendingIntent를 시작합니다 Activity. 을 지정하는 것처럼 보이 PendingIntent므로 문제는 다른 곳에 있습니다. 논리적으로, 누락 된 아이콘이라고 결론을 내릴 수 있습니다.


나는 그 문제를 발견했다. 그러나 적절한 답변에 감사드립니다. 도와 주셔서 정말 감사합니다.
Choudhury AM

1
addAction은 4.1 이후로만 사용할 수 있다고 말했지만 잘못되었습니다. 2.3에서 사용했습니다. 참고 매뉴얼에서는 알림이 아닌 버튼에 대해 설명합니다. "Android 4.1 이전의 플랫폼에서는 액션 버튼이 나타나지 않습니다." 여기에서 확인할 수 있습니다 : AddAction 은 android.support.v4.app에 포함되어 있습니다
ƒernando Valle

1
OP는 당신이 제안하는 것처럼 사용 Notification.Builder하지 않고 사용 하고 NotificationCompat.Builder있습니다. 호환성 라이브러리가 있고 사용할 수 있다고해서 일반 API에서 함수를 사용할 수 있다는 의미는 아닙니다. 제공하는 링크는 실제로 이것을 규정합니다. 이 질문은 Notification.Builder예제에서 알 수 있듯이 와 분명히 관련이 있습니다. 그리고 호환성 라이브러리는 아마도 4.1이 나온 이후에만이 함수를 포함했을 것입니다. 2.3 이후로 사용 가능하다고 제안했기 때문에 귀하의 대답은 오해의 소지가 있습니다.
slinden77

내가
잘못 이해

4
아아 아이콘 !! 누락 된 것을 깨닫지 못했지만 추가하면 문제가 해결되었습니다. 아이콘 누락에 대해 콘솔에서 유용한 정보를 보지 못했지만 조용히 실패하는 것 같습니다.
Pete

33

작은 아이콘이 누락되었습니다. 나는 똑같은 실수를했고 위의 단계에서 그것을 해결했습니다.

공식 문서에 따르면 : 알림 개체는 다음을 포함해야합니다.

  1. setSmallIcon ()에 의해 설정된 작은 아이콘

  2. setContentTitle ()에 의해 설정된 제목

  3. setContentText ()에 의해 설정된 세부 텍스트

  4. Android 8.0 (API 레벨 26) 이상 에서 유효한 알림 채널 ID, setChannelId ()에 의해 설정 되거나 채널 생성시 NotificationCompat.Builder 생성자에 제공됩니다.

참조 http://developer.android.com/guide/topics/ui/notifiers/notifications.html를


3
이것은 사실이 아닙니다. setContent를 사용하여 사용자 정의 알림 레이아웃을 사용하는 경우 제목이나 텍스트가 필요하지 않습니다.
Ray Li

11

이로 인해 오늘은 당혹 스러웠지만 Android 9.0 (Pie)에서는 기본적으로 방해 금지 모드Android 8.1 (Oreo) 이전과 같이 알림을 무음 으로 처리 하지 않고 모든 알림을 숨길 수 있기 때문이라는 것을 깨달았습니다 . 알림에는 적용되지 않습니다.

나는 개발 장치에 DND를 사용하는 것을 좋아하므로 DND 설정으로 이동하여 알림을 숨기지 않고 음소거하도록 설정을 변경하면 문제가 해결되었습니다.


9

Android 8.1 (Oreo) 이후 Android 버전에서는 알림을 표시하기 위해 알림 채널 을 반드시 만들어야합니다. Oreo + Android 용 앱에 알림이 표시되지 않는 경우 앱이 시작될 때 다음 함수를 호출해야합니다.

private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name,
       importance);
        channel.setDescription(description);
        // Register the channel with the system; you can't change the importance
        // or other notification behaviours after this
        NotificationManager notificationManager =
        getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
   }
}

1

나는 당신이 잊었다 고 생각합니다

addAction(int icon, CharSequence title, PendingIntent intent)

여기보기 : 작업 추가


1
이 방법 addAction()은에서 사용할 수 없습니다 Notification.Builder.
slinden77 2013 년

1
존재하지만 더 이상 사용되지 않습니다. 대신를 Action사용하여 만들 수 있는 인스턴스를 전달할 수 있습니다 Notification.Action.Builder. PS, 항상 사용 (호환) 대안 (즉, NotificationCompat), 구글은 패치 버그하는 경향이 그들과 함께 더 나은 호환성을 제공하기 때문에
고칸 바리스 케르

작업을 지정하지 않으려면 .setContentIntent(null)빌더와 함께 사용 하십시오.
고칸 바리스 케르

1

내 Android 앱에서 동일한 문제가 발생했습니다. 알림을 시험해 보았는데 Android 7.0 (Nougat) 시스템 을 실행하는 Android 에뮬레이터에는 알림이 표시되는 반면 Android 8.1 (Oreo) 이 설치된 휴대 전화에서는 실행되지 않았습니다 .

문서를 읽은 후 Android에는 알림 채널이라는 기능이 있으며이 기능이 없으면 Oreo 장치에 알림이 표시되지 않습니다. 다음은 알림 채널에 대한 공식 Android 문서 링크입니다.


1

나에게 그것은 deviceToken. 수신자 및 발신자 장치 토큰이 데이터베이스에서 올바르게 업데이트되었는지 또는 알림을 보내기 위해 액세스하는 위치에 있는지 확인하십시오.

예를 들어 다음을 사용하여 앱 시작시 장치 토큰을 업데이트합니다. 따라서 항상 올바르게 업데이트됩니다.

// Device token for push notifications
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(
  new OnSuccessListener<InstanceIdResult>() {

    @Override
    public void onSuccess(InstanceIdResult instanceIdResult) {

        deviceToken = instanceIdResult.getToken();

        // Insert device token into Firebase database
        fbDbRefRoot.child("user_detail_profile").child(currentUserId).child("device_token")).setValue(deviceToken)
                .addOnSuccessListener(
                  new OnSuccessListener<Void>() {

                    @Override
                    public void onSuccess(Void aVoid) {

                    }
                });
    }
});

이것은 어디에서 deviceToken선언됩니까?
Peter Mortensen 19

onSuccess비어 있습니까?
Peter Mortensen 19

@PeterMortensen .. 성공하면 새로운 의도를 시작하거나 건배하거나 같은 페이지에 머무르는 것과 같이 논리가 허용하는 모든 것을 할 수 있습니다. deviceToken 선언에 관해서는 페이지에서 onCreate 전에 Private String deviceToken으로 선언 할 수 있습니다.
DragonFire

(내 자신의 의견을 더 명확하게하려면 다음 두 가지가 있습니다 onSuccess의 - 나는 (비어있는) 내부 일을 언급했다)
피터 모텐슨

1

또한 build.gradle 파일을 변경하고 사용 된 Android SDK 버전을 여기에 추가해야합니다.

implementation 'com.android.support:appcompat-v7:28.0.0'

이것은 제 경우에 매력처럼 작동했습니다.


0

알림을 차례로 빠르게 표시하거나 기존 알림을 취소 한 다음 즉시 다시 표시하는 경우 알림이 표시되지 않을 수 있습니다 (예 : 진행중인 알림의 변경 사항을 사용자에게 알리기 위해 미리 알림을 트리거하기 위해). 이러한 경우 시스템 알림이 사용자에게 너무 압도적이거나 스팸이 될 수 있다고 생각 될 때 알림을 차단하기로 결정할 수 있습니다.

적어도 재고 Android (10 개로 테스트)에서 외부에서이 동작은 약간 무작위로 보입니다. 가끔 발생하고 때로는 그렇지 않습니다. 제 생각에는 너무 많은 알림을 보낼 수없는 매우 짧은 시간 임계 값이 있습니다. NotificationManager.cancel()그런 다음 호출 NotificationManager.notify()하면 때때로이 동작이 발생할 수 있습니다.

옵션이있는 경우 알림을 업데이트 할 때 이전에 취소하지 말고 NotificationManager.notify()업데이트 된 알림으로 전화 하십시오. 이것은 시스템에서 앞서 언급 한 차단을 트리거하지 않는 것 같습니다.


-1

알림 채널을 사용하는 동안 버전> = Android 8.1 (Oreo) 인 경우 중요도를 높게 설정합니다.

int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);

1
"하나의 버전> =" 이란 무엇을 의미 합니까? 당신은 의미합니까 "(또는 그 이상) 버전 8.1에" ? 여기에있는 의견이 아닌 귀하의 답변수정하여 응답 해주십시오 (적절한 경우).
Peter Mortensen

그것은 나를 정정 단지 형 덕분이 나를 용서 @PeterMortensen
파이잘 Naseer에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.