noficitations (notification.setLatestEventInfo ())에 더 이상 사용되지 않는 메서드를 사용하고 있음을 발견했습니다.
Notification.Builder를 사용하라는 메시지가 표시됩니다.
- 어떻게 사용하나요?
새 인스턴스를 만들려고하면 다음과 같은 메시지가 표시됩니다.
Notification.Builder cannot be resolved to a type
noficitations (notification.setLatestEventInfo ())에 더 이상 사용되지 않는 메서드를 사용하고 있음을 발견했습니다.
Notification.Builder를 사용하라는 메시지가 표시됩니다.
새 인스턴스를 만들려고하면 다음과 같은 메시지가 표시됩니다.
Notification.Builder cannot be resolved to a type
답변:
이것은 API 11에 있으므로 3.0 이전 버전으로 개발하는 경우 이전 API를 계속 사용해야합니다.
업데이트 : NotificationCompat.Builder 클래스가 지원 패키지에 추가되었으므로이를 사용하여 API 레벨 v4 이상을 지원할 수 있습니다.
http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
Notification.Builder API 11 또는 NotificationCompat.Builder API 1
이것은 사용 예입니다.
Intent notificationIntent = new Intent(ctx, YourClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(ctx,
YOUR_PI_REQ_CODE, notificationIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
NotificationManager nm = (NotificationManager) ctx
.getSystemService(Context.NOTIFICATION_SERVICE);
Resources res = ctx.getResources();
Notification.Builder builder = new Notification.Builder(ctx);
builder.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.some_img)
.setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.some_big_img))
.setTicker(res.getString(R.string.your_ticker))
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setContentTitle(res.getString(R.string.your_notif_title))
.setContentText(res.getString(R.string.your_notif_text));
Notification n = builder.build();
nm.notify(YOUR_NOTIF_ID, n);
Notification.Builder
문서 페이지 에 심각한 오타가 있다고 말해야한다고 생각 합니다. 나는 그들이하는 말을하고 있었지만 말이되지 않았습니다. 나는 여기에 와서 그것이 다르다는 것을 봅니다. 문서에있는 실수를 알게 되었기 때문에 귀하의 답변에 감사드립니다.
builder.getNotification()
는 더 이상 사용되지 않는다고 말합니다 . 그것은 당신이 사용해야 말한다 builder.build()
.
setSmallIcon()
, setContentTitle()
및 setContentText()
최소 요구 사항은 다음과 같습니다.
여기에 선택된 답변 외에도 Source Tricks 의 NotificationCompat.Builder
클래스에 대한 샘플 코드가 있습니다 .
// Add app running notification
private void addNotification() {
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Notifications Example")
.setContentText("This is a test notification");
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
// Add as notification
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(FM_NOTIFICATION_ID, builder.build());
}
// Remove notification
private void removeNotification() {
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancel(FM_NOTIFICATION_ID);
}
자세한 내용은 알림 업데이트 링크를 참조하십시오.
Android N을 사용하면 유사한 알림을 번들로 묶어 단일 알림으로 표시 할 수도 있습니다. 이를 가능하게하기 위해 Android N은 기존
NotificationCompat.Builder.setGroup()
방법을 사용합니다 . 사용자는 각 알림을 확장하고 알림 창에서 개별적으로 각 알림에 대해 응답 및 해제와 같은 작업을 수행 할 수 있습니다.이것은 NotificationCompat를 사용하여 알림을 보내는 간단한 서비스를 보여주는 기존 샘플입니다. 사용자가 읽지 않은 각 대화는 고유 한 알림으로 전송됩니다.
이 샘플은 Android N에서 사용할 수있는 새로운 알림 기능을 활용하도록 업데이트되었습니다.
샘플 코드 .
알림을 빌드하는 데 문제가있었습니다 (Android 4.0 이상용으로 만 개발). 이 링크 는 내가 뭘 잘못하고 있는지 정확히 보여주고 다음과 같이 말합니다.
Required notification contents
A Notification object must contain the following:
A small icon, set by setSmallIcon()
A title, set by setContentTitle()
Detail text, set by setContentText()
기본적으로 나는 이것들 중 하나를 놓치고 있었다. 이 문제를 해결하기위한 기초로서, 최소한이 모든 것이 있는지 확인하십시오. 바라건대 이것은 다른 사람의 두통을 덜어 줄 것입니다.
누구에게나 도움이되는 경우를 대비하여 ... 새로운 오래된 API에 대해 테스트 할 때 지원 패키지를 사용하여 알림을 설정하는 데 많은 문제가있었습니다. 나는 그들이 최신 장치에서 작동하도록 할 수 있었지만 이전 장치에서 오류 테스트를 받게되었습니다. 마침내 나를 위해 일하게 된 것은 알림 기능과 관련된 모든 가져 오기를 삭제하는 것입니다. 특히 NotificationCompat 및 TaskStackBuilder. 처음에 내 코드를 설정하는 동안 지원 패키지가 아닌 최신 빌드에서 추가 된 가져 오기를 수행하는 것 같습니다. 그런 다음 나중에 이클립스에서 이러한 항목을 구현하려고 할 때 다시 가져 오라는 메시지가 표시되지 않았습니다. 이해가 되길 바라며 다른 사람에게 도움이되기를 바랍니다. :)
API 8에서도 작동합니다.이 코드를 사용할 수 있습니다.
Notification n =
new Notification(R.drawable.yourownpicturehere, getString(R.string.noticeMe),
System.currentTimeMillis());
PendingIntent i=PendingIntent.getActivity(this, 0,
new Intent(this, NotifyActivity.class),
0);
n.setLatestEventInfo(getApplicationContext(), getString(R.string.title), getString(R.string.message), i);
n.number=++count;
n.flags |= Notification.FLAG_AUTO_CANCEL;
n.flags |= Notification.DEFAULT_SOUND;
n.flags |= Notification.DEFAULT_VIBRATE;
n.ledARGB = 0xff0000ff;
n.flags |= Notification.FLAG_SHOW_LIGHTS;
// Now invoke the Notification Service
String notifService = Context.NOTIFICATION_SERVICE;
NotificationManager mgr =
(NotificationManager) getSystemService(notifService);
mgr.notify(NOTIFICATION_ID, n);
아니면 내가 훌륭한 수행하는 것이 좋습니다 튜토리얼 이 약을
나는 사용했다
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Firebase Push Notification")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
// This is a working Notification
private static final int NotificID=01;
b= (Button) findViewById(R.id.btn);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Notification notification=new Notification.Builder(MainActivity.this)
.setContentTitle("Notification Title")
.setContentText("Notification Description")
.setSmallIcon(R.mipmap.ic_launcher)
.build();
NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notification.flags |=Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(NotificID,notification);
}
});
}
자체 포함 된 예
이 답변 과 동일한 기술 이지만 :
출처:
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Main extends Activity {
private int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Button button = new Button(this);
button.setText("click me");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Notification notification = new Notification.Builder(Main.this)
/* Make app open when you click on the notification. */
.setContentIntent(PendingIntent.getActivity(
Main.this,
Main.this.i,
new Intent(Main.this, Main.class),
PendingIntent.FLAG_CANCEL_CURRENT))
.setContentTitle("title")
.setAutoCancel(true)
.setContentText(String.format("id = %d", Main.this.i))
// Starting on Android 5, only the alpha channel of the image matters.
// https://stackoverflow.com/a/35278871/895245
// `android.R.drawable` resources all seem suitable.
.setSmallIcon(android.R.drawable.star_on)
// Color of the background on which the alpha image wil drawn white.
.setColor(Color.RED)
.build();
final NotificationManager notificationManager =
(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(Main.this.i, notification);
// If the same ID were used twice, the second notification would replace the first one.
//notificationManager.notify(0, notification);
Main.this.i++;
}
});
this.setContentView(button);
}
}
Android 22에서 테스트되었습니다.