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");
}
}
}
As @tyczj提及 - 顯示您的代碼。在我看來,你的'BroadcastReceiver'需要創建一個'Notification',用戶可以用它來打開你的'Activity'。 – Squonk
你是說你不想讓任何東西出現,只想用SMS閱讀短信?如果是這樣,那不是一個很好的設計實踐 - 用戶應該被允許選擇何時向他們讀取消息。 – Squonk
您可以使用通知,告訴系統讓您的應用程序保持運行! – Eenvincible