마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

앱 종료 후 항상 알림 받기

0 추천

파이어베이스에서  "1"을 받으면 알림이 울리고 다시 "0"으로 변경하는 코드 입니다. 앱 실행중 알림 받는것은 문제가 없으나 앱을 완전히 종료하마면 알림을 받을수가 없습니다. 항상 알림을 받고 싶은데 어떻게 해야하나요..?

질문 계속해서 죄송해요.......

public class MainActivity extends AppCompatActivity {
    public Button button_connect_bluetooth;
    public Button btton_order_record;
    public Button button_how_to;
    public Button button_exit;
    public Button btnC;
    final FirebaseFirestore db = FirebaseFirestore.getInstance();
    final DocumentReference db2 = db.collection("photo").document("picture");
    String photo;
    Map<String,Object> photo1 = new HashMap<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button_connect_bluetooth = (Button) findViewById(R.id.button_connect_bluetooth);
        btton_order_record = (Button) findViewById(R.id.btton_order_record);
 //       button_how_to = (Button) findViewById(R.id.button_how_to);
        button_exit = (Button) findViewById(R.id.button_exit);
//        btnC = (Button) findViewById(R.id.btnC);


        db2.addSnapshotListener(new EventListener<DocumentSnapshot>() {
            @Override
            public void onEvent(@Nullable DocumentSnapshot snapshot,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    return;
                }
                if (snapshot != null && snapshot.exists()) {
                    String test = String.valueOf(snapshot.getData());
                    //    Toast.makeText(getApplicationContext(),"변경감지",Toast.LENGTH_SHORT).show();
                    if(test.equals("{current=1}")||test.equals("{current=0}")){
                        db2.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                if (task.isSuccessful()) {
                                    DocumentSnapshot document = task.getResult();
                                    if (document.exists()) {
                                        photo=document.getData().toString();
                                        if(photo.equals("{current=1}")){
                                            show();
                                        }
                                    } else {

                                    }
                                } else {

                                }
                            }
                        });
                    }
                } else {

                }
            }
        });

// 노액션바 설정
        button_connect_bluetooth.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onStart();
                Intent intent = new Intent(MainActivity.this, RealConnect.class);
                startActivity(intent);
                //SharedPreferences를 이용해 블루투스 연결이 된 이후 부터는
                //텝레이아웃의 2번쨰 페이지를 보여주도록 수정 예정
            }
        });

//        button_how_to.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                Intent intent = new Intent(MainActivity.this, HowToActivity.class);
//                startActivity(intent);
//            }
//        });

        btton_order_record.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, OrderRecord.class);
                startActivity(intent);
            }
        });

        button_exit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 종료 확인 다이얼로그(대화창) 생성
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, android.R.style.Theme_DeviceDefault_Light_Dialog);
                builder.setMessage("정말로 앱을 종료하시겠습니까?").setTitle("앱 종료")
                        .setPositiveButton("아니오", new DialogInterface.OnClickListener() {
                            // 아니오 버튼을 눌렀을 때
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // 아무 작동없이 함수를 종료
                                return;
                            }
                        })
                        .setNeutralButton("예", new DialogInterface.OnClickListener() {
                            // 예 버튼을 눌렀을 때
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // 앱을 종료
                                finish();
                            }
                        })
                        .setCancelable(false).show();
            }
        });
//        btnC.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Intent intent = new Intent(MainActivity.this, Test.class);
//                startActivity(intent);
//            }
//        });
    }
    private void show() {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "default");
        builder.setSmallIcon(R.drawable.push1);
        builder.setContentTitle("배달통에 음식이 도착했어요");
        builder.setContentText("확인하기");

        Intent intent = new Intent(this, Intro.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,
                0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        builder.setContentIntent(pendingIntent);

//        Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),
//                R.drawable.push1);
//        builder.setLargeIcon(largeIcon);
//        builder.setColor(Color.BLUE);

        Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(this,
                RingtoneManager.TYPE_NOTIFICATION);

        builder.setSound(ringtoneUri);

        long[] vibrate = {0, 100, 200, 300};
        builder.setVibrate(vibrate);
        builder.setAutoCancel(true);

        NotificationManager manager = (NotificationManager) getSystemService((NOTIFICATION_SERVICE));
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            manager.createNotificationChannel(new NotificationChannel("default", "기본채널",
                    NotificationManager.IMPORTANCE_DEFAULT));
        }
        manager.notify(1, builder.build());

        photo1.clear();
        photo1.put("current","0");
        db.collection("photo").document("picture")
                .set(photo1)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void unused) {
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                    }
                });

    }
}

 

 

 

개미1 (1,260 포인트) 님이 2021년 11월 11일 질문
Firestore는 앱이 종료되면 데이터를 받을 수가 없어요. 앱이 백그라운드인 상태에서 메세지를 받으려면 Push Notification을 사용해야 하지 않나요.
노티피케이션을 보내지 않고도 앱에게 메세지를 전달할 수도 있는데, 그렇게 하려면 서버쪽 작업이 필요해 보이네요.
https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...