我有一个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