FCM푸시 알림이 오면 푸시알림 내용을 tts로 읽어주고 싶습니다.
그런데 홈키눌러서 앱을 백그라운드로 한번 돌리고 실행중 앱목록으로 다시 화면에띄운 뒤부터는
TTS가 동작하지 않습니다.
tts.speak함수까지 출력할 문자열과 함께 접근하는것은 로그캣으로확있햇지만( TTS진입 with~~~~) 작동하지 않아 문제입니다
방법이 있을까요?
package com.example.sdna.pushtotts2;
public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {
TextToSpeech tts;
TextToSpeechService _tts;
Context context;
private static final String TAG = "FirebaseMsgService";
public class dididi implements TextToSpeech.OnInitListener
{
@Override
public void onInit ( int status){
if (status != TextToSpeech.ERROR) {
tts.setLanguage(Locale.KOREAN);
}
}
}
// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//sendPushNotification3(remoteMessage);
Log.d("slog", "메시지 리시브");
sendPushNotification(remoteMessage.getData().get("message"));
}
private void TextTTS(String message){
Log.d("slog", "TTS진입 with"+message);
tts=new TextToSpeech(getApplicationContext(), new dididi());
tts.setLanguage(Locale.KOREAN);
String text = "알림이 도착했습니다";
String text2 = message;
Log.d("slog", "TTS 말하는중?"+tts.isSpeaking());
//http://stackoverflow.com/a/29777304
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.d("slog", "TTS진입2");
ttsGreater21(text2);
} else {
Log.d("slog", "TTS진입3");
ttsUnder20(text2);
}
/*
SystemClock.sleep(5000);
if(tts !=null){
tts.stop();
tts.shutdown();
}*/
}
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.mipmap.ic_launcher).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(1231231/* 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");
Log.d("slog", "TTS speak");
tts.speak(text, TextToSpeech.QUEUE_FLUSH, map);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void ttsGreater21(String text) {
String utteranceId=this.hashCode() + "";
Log.d("slog", "TTS speak");
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId);
}
@Override
public void onStart(Intent intent, int startId) {
Log.d("slog", "onStart()");
super.onStart(intent, startId);
Toast toast = Toast.makeText(context, "서비스 onStart", Toast.LENGTH_SHORT);
toast.show();
}
@Override
public void onDestroy() {
Log.d("slog", "onDestroy()");
super.onDestroy();
//Toast toast = Toast.makeText(context, "서비스 onDestroy", Toast.LENGTH_SHORT);
//toast.show();
}
@Override
public void onCreate() {
super.onCreate();
Log.d("slog", "onCreate()");
context = getApplicationContext();
//Toast toast = Toast.makeText(context, "서비스 onCreate", Toast.LENGTH_SHORT);
// toast.show();
}
}
/*
아이콘 + 제목 + 긴 텍스트
알림이 왔을 때는 제목과 아래로 당겨주세요라는 텍스트를 보여 줍니다.
아래로 드래그 하면 긴 텍스트를 보여줍니다.
NotificationCompat.BigTextStyle
을 사용합니다.
참고
https://trandent.com/board/Android/detail/738
*/
11-23 17:39:01.873 22791-22791/com.example.sdna.pushtotts2 D/slog: onCreate()
11-23 17:39:01.883 22791-23422/com.example.sdna.pushtotts2 D/slog: 메시지 리시브
11-23 17:39:01.923 22791-23422/com.example.sdna.pushtotts2 D/slog: TTS진입 with오류 발생합니다
11-23 17:39:01.923 22791-23422/com.example.sdna.pushtotts2 D/slog: TTS 말하는중?false
11-23 17:39:01.923 22791-23422/com.example.sdna.pushtotts2 D/slog: TTS진입3
11-23 17:39:01.933 22791-23422/com.example.sdna.pushtotts2 D/slog: TTS speak
11-23 17:39:01.933 22791-22791/com.example.sdna.pushtotts2 D/slog: onDestroy()