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

FCM이용한 푸시알림을 TTS로 읽고싶습니다 도와주세요

0 추천

FCM을 이용해서 푸시알림을 날리면

알림이 뜰때 TTS 로 읽어주는 앱을 만들고 있습니다.

그런데 문제가 있습니다.

1. 앱이 화면에 띄워져 있을때만 TTS가 동작한다. ( String에 직접 '알림이 도착했습니다' 넣어서 확인)

2. 디버그모드시에는 TTS가 작동하지만 usb를 빼고 실행하면 1번의 TTS도 작동하지 않는다

4.앱이 백그라운드, 화면꺼짐상태로 가면 상단바에 푸시알림이 나오긴 하지만 TTS동작을 하지않으며 알람 소리도 나오지않는다.

5.푸시알림이 도착하면 화면이 켜지는 코드를 넣었지만 화면이 켜지지 않는다.

 

 

제가 원하는것은 앱이 백그라운드, 킬, 화면에 띄워짐 상태에 상관없이 상단바에 푸시알림이 나오고

TTS로 그 메세지를 읽어주는것인데 어떻게 수정해야 할까요??

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {
    TextToSpeech tts;
    private static final String TAG = "FirebaseMsgService";

    // [START receive_message]
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        sendPushNotification(remoteMessage.getData().get("message"));
    }
    private void TextTTS(String message){
        tts=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if(status != TextToSpeech.ERROR) {
                    tts.setLanguage(Locale.KOREAN);
                }
            }
        });
        String text = "알림이 도착했습니다";
        String text2 = message;

        //http://stackoverflow.com/a/29777304
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ttsGreater21(text);
        } else {
            ttsUnder20(text);
        }
    }


    private void sendPushNotification(String message) {
        System.out.println("received message : " + message);
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                //.setSmallIcon(R.drawable.noti).setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher) )
                .setContentTitle("Push Title ")
                .setContentText(message)
                .setAutoCancel(true)
                .setSound(defaultSoundUri).setLights(000000255,500,2000)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
        wakelock.acquire(5000);

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());


        TextTTS(message);
    }


    @SuppressWarnings("deprecation")
    private void ttsUnder20(String text) {
        HashMap<String, String> map = new HashMap<>();
        map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId");
        tts.speak(text, TextToSpeech.QUEUE_FLUSH, map);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private void ttsGreater21(String text) {
        String utteranceId=this.hashCode() + "";
        tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId);
    }

}

 

 

신입 (570 포인트) 님이 2016년 11월 22일 질문
신입님이 2016년 11월 22일 수정
죽는데서 나오는 로그캣좀 올려주세요

답변 달기

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