1
我知道這是與我的類似的問題。 https://stackoverflow.com/a/22511290/2208342 但我已經讀過這個問題的解決方案將被淘汰,因爲Android正在取代該代碼。下面檢查服務是否從Broadcast Reciever內部運行
qoute從https://stackoverflow.com/a/5921190/2208342
採取我會建議使用此解決方案。對於
Android L
,他們正在刪除ActivityManager.getRecentTasks()
,並且它在文檔中有相同的註釋。所以要警告!
我也聽說這個解決方案不適用於android kitkat。
廣播接收器類
public class IncomingSms extends BroadcastReceiver {
final SmsManager sms = SmsManager.getDefault();
public IncomingSms(){}
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
Intent intent1 = new Intent(context, CallDetectService.class);
if (context.stopService(intent1)) {
Toast.makeText(context,"if context",Toast.LENGTH_LONG).show();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
String sms = "TEST";
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(senderNum, null, sms, null, null);
Toast.makeText(context, "Sms sent Succesfully", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(context, "Sms Failed", Toast.LENGTH_LONG).show();
}
Log.i("SmsReciver", "senderNum: " + senderNum + "; message: " + message);
// Show Alert
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: " + senderNum + ", message: " + message, duration);
toast.show();
} // End For loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReciever", "Exeption smsReceiver" + e);
}
}
else{
Toast.makeText(context,"else context",Toast.LENGTH_LONG).show();
}
}
}
服務類
public class CallDetectService extends Service {
private CallHelper callHelper;
public CallDetectService() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
callHelper = new CallHelper(this);
int res = super.onStartCommand(intent, flags, startId);
callHelper.start();
Toast.makeText(getApplicationContext(), "Starting Service", Toast.LENGTH_LONG).show();
return res;
}
@Override
public void onDestroy(){
super.onDestroy();
callHelper.stop();
//Toast.makeText(getApplicationContext(),"Stop Service",Toast.LENGTH_LONG).show();
}
@Override
public IBinder onBind (Intent intent) {
return null;
}
}
在我的MainActivity
我有這樣的一段代碼,而這正是我想在我的廣播接收器。
Intent intent = new Intent(this,CallDetectService.class);
if (stopService(intent)){
謝謝。我如何註冊/取消註冊收件人以及如何參考服務。如果我的服務正在運行,我希望廣播接收機處於開啓狀態,如果服務未運行,我希望廣播接收機關閉。 –
請詳細說明提供服務的邏輯:1)開啓/關閉服務時需要監聽2)當我的應用切換到開啓模式(服務運行時)時,您需要接收器 –
究竟是什麼。任何傳入的短信將自動回覆短信。當我的應用程序切換到關閉模式(服務未運行時)。我不希望傳入的短信被自動回覆。 –