2014-03-25 71 views
2

我正在製作一個短信閱讀器應用程序。只要它們在brodcast監聽器 的幫助下傳入消息,我的活動就會收到消息,並在文本到語音類的幫助下讀取消息。 問題是,只要他們是傳入消息,我的活動進入前臺。任何人都可以幫助我如何讓我的應用程序在後臺運行?我正在粘貼我的代碼以供參考。謝謝 !如何讓應用程序在後臺運行?

MyBroadcastReceiver. java 
package com.example.sms_reader; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.util.Log; 


public class MyBrodcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context arg0, Intent intent) 
    { 
     Log.d("tag1", "Receiver is activated"); 
     Log.d("tag2", "msg"); 
     Bundle bundle = intent.getExtras(); 

     if (bundle != null) 
     { 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      SmsMessage[] messages = new SmsMessage[pdus.length]; 
      for (int i = 0; i < pdus.length; i++) 
      { 
     messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      } 
     for (SmsMessage message : messages) 
      { 
       String msg = message.getMessageBody(); 
       long when = message.getTimestampMillis(); 
       String from = message.getOriginatingAddress(); 
       Log.d("tag2", msg); 
       Log.d("tag3", from); 
       Intent i = new Intent(arg0 ,Texttospeech.class); 
       i.putExtra("msg", msg); 
       i.putExtra("when", when); 
       i.putExtra("from", from); 
       i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       arg0.startActivity(i); 
       Log.d("tag4", "intent called"); 

      } 


     } 
     else{ 
      Log.d("tag2", "bundle not received"); 
     } 
    } 

} 


Texttospeech.java 
package com.example.sms_reader; 

import java.util.Locale; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.speech.tts.TextToSpeech; 
import android.util.Log; 

public class Texttospeech extends Activity implements 
TextToSpeech.OnInitListener 
{ 

TextToSpeech tts ; 
String content; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d("tag4", "INTENT RECEIVED"); 
    tts = new TextToSpeech(this, this);  
    Intent data = getIntent(); 
    Log.d("tag5", "INTENT "); 
    String msg = data.getStringExtra("msg"); 
    String from = data.getStringExtra("from"); 
    content = "You have received a message from" +from +"and it says"+msg; 
    Log.d("tag6", content); 
    speakOut(); 

}; 

private void speakOut() { 


    tts.speak(content, TextToSpeech.QUEUE_FLUSH, null); 
} 

@Override 
public void onDestroy() { 
    // Don't forget to shutdown! 
    if (tts != null) { 
     tts.stop(); 
     tts.shutdown(); 
    } 
    super.onDestroy(); 
} 

@Override 
public void onInit(int status) { 
    // TODO Auto-generated method stub 

    if (status == TextToSpeech.SUCCESS) { 

     int result = tts.setLanguage(Locale.US); 

     // tts.setPitch(5); // set pitch level 

     // tts.setSpeechRate(2); // set speech speed rate 

     if (result == TextToSpeech.LANG_MISSING_DATA 
       || result == TextToSpeech.LANG_NOT_SUPPORTED) { 
      Log.e("TTS", "Language is not supported"); 
     } 
     else { 

      speakOut(); 
     } 

             } 
    else 
    { 
     Log.e("TTS", "Initilization Failed"); 
    } 

} 
} 
+0

As @tyczj提及 - 顯示您的代碼。在我看來,你的'BroadcastReceiver'需要創建一個'Notification',用戶可以用它來打開你的'Activity'。 – Squonk

+0

你是說你不想讓任何東西出現,只想用SMS閱讀短信?如果是這樣,那不是一個很好的設計實踐 - 用戶應該被允許選擇何時向他們讀取消息。 – Squonk

+0

您可以使用通知,告訴系統讓您的應用程序保持運行! – Eenvincible

回答

1

您正在調用文本到語音活動,這就是爲什麼它每次都彈出。如果你想保持它在後臺改變你的文字到語音活動服務。