我有一個service
可以從button
啓動和停止。服務註冊接收器
但在service
我想註冊一個收音機聽SMS廣播。我只想讓service
在運行時收聽SMS。我試過registerReceiver(receiver, intentfilter)
但這不起作用。我究竟做錯了什麼?
我有一個service
可以從button
啓動和停止。服務註冊接收器
但在service
我想註冊一個收音機聽SMS廣播。我只想讓service
在運行時收聽SMS。我試過registerReceiver(receiver, intentfilter)
但這不起作用。我究竟做錯了什麼?
您必須在AndroidManifest文件中設置權限。
<receiver android:name=".MySMSReciever">
<intent-filter>
<action android:name=
"android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
我已經做到了。我得到一個AccountManagerService和ContactsProvider錯誤/ – Vic 2010-12-16 15:10:57
我的IntentFilter是否正確?私人靜態最終字符串SMS_RECEIVED_ACTION = 「android.provider.Telephony.SMS_RECEIVED」? – Vic 2010-12-16 15:12:04
是的,您是如何在清單中添加接收器的,但我想動態註冊它。上述方法即使在我的服務停止時也會監聽所有傳入的SMS。我只想在我的服務正在運行時收聽短信。 – Vic 2010-12-16 15:14:47
如果你想只接收廣播,而您的服務正在運行,您將需要動態註冊接收器的onCreate()
此外,它不要忘記註銷您的接收器中的onDestroy是非常重要的() 方法!
實施例:
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.widget.Toast;
public class YourClass extends Service {
private static final String ACTION="android.provider.Telephony.SMS_RECEIVED";
private BroadcastReceiver yourReceiver;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
final IntentFilter theFilter = new IntentFilter();
theFilter.addAction(ACTION);
this.yourReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Do whatever you need it to do when it receives the broadcast
// Example show a Toast message...
showSuccessfulBroadcast();
}
};
// Registers the receiver so that your service will listen for
// broadcasts
this.registerReceiver(this.yourReceiver, theFilter);
}
@Override
public void onDestroy() {
super.onDestroy();
// Do not forget to unregister the receiver!!!
this.unregisterReceiver(this.yourReceiver);
}
private void showSuccessfulBroadcast() {
Toast.makeText(this, "Broadcast Successful!!!", Toast.LENGTH_LONG)
.show();
}
}
刪除從XML意向濾波器和僅做了接收機的動態登記。 如果您不希望它在服務關閉時運行,請在停止服務之前註銷它。不要忘了添加權限的XML雖然....
如果你指定的問題,這個問題會更有幫助的人。 「這不起作用」=「接收器永遠不會被調用」,例如?或者它被調用,但不是與SMS_RECEIVED_ACTION?或者有錯誤?或... – LarsH 2017-01-19 20:06:15