2012-12-17 68 views
1

我正在使用SMS Receiver服務,該服務從Android清單文件開始,使用以下代碼。問題是,即使在應用程序退出後它仍然可以正常工作。 如何通過接收短信停止該服務?停止SMS接收器

開始服務代碼:

<receiver android:name=".dataAccess.SMSReceiver" android:enabled="true"> 
    <intent-filter > 
    <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 
+0

'stopService(新意圖(SMSReceiver.class))'您的活動應該這樣做。 – Nachi

+0

我懷疑它; BroadcastReceiver甚至不是服務。你需要做的是*註銷*接收器。如果接收者是通過清單註冊的,我甚至不知道你是否可以這樣做。一種可能的解決方案是使用registerReceiver()而不是清單,那麼你一定能夠以編程方式取消註冊。但是現在你需要安排被調用的代碼來完成註冊。 –

回答

3

如果要繼續使用清單中定義的廣播接收器,仍可以使用包管理器啓用/禁用它。

檢查here

ComponentName receiver = new ComponentName(context, SMSReceiver.class); 

PackageManager pm = context.getPackageManager(); 

pm.setComponentEnabledSetting(receiver, 
    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
    PackageManager.DONT_KILL_APP) 
1

快速修正之前,我繼續:這實際上不是一個Android服務,這是一個BroadcastReceiver

最簡單的方法是聽你的應用程序的暫停/恢復,並在那裏註冊/取消註冊SMS接收器。以下是Wi-Fi Direct教程中的示例代碼片段。

@Override 
public void onResume() { 
    super.onResume(); 
    receiver = new SMSReceiver(...); 
    registerReceiver(receiver, intentFilter); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    unregisterReceiver(receiver); 
}