问题描述
我正在尝试在后台读取收到的短信,并在收到短信时将设备振动 20 秒。我正在为此目的实现 service
类:
public class Ringer_modifier extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
SMSreceiver mSmsReceiver = new SMSreceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYstem_HIGH_PRIORITY);
filter.addAction("android.provider.Telephony.SMS_RECEIVED"); // SMS
this.registerReceiver(mSmsReceiver,filter);
}
@Override
public int onStartCommand(Intent intent,int flags,int startId) {
super.onStartCommand(intent,flags,startId);
return START_STICKY;
}
@Override
public void onDestroy() {
SMSreceiver mSmsReceiver = new SMSreceiver();
unregisterReceiver(mSmsReceiver);
super.onDestroy();
}
static class SMSreceiver extends broadcastReceiver {
@Override
public void onReceive(Context context,Intent intent) {
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
Vibrator v = (Vibrator) context.getSystemService(VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneshot(20000,VibrationEffect.DEFAULT_AMPLITUDE));
} else {
v.vibrate(20000);
}
}
}
}
}
我从这样的活动中调用这个 service
类:
startService(new Intent(this,Ringer_modifier.class));
但是我的广播接收器既不读取传入的消息也不振动。我在这里做错了什么?我的 targetsdkversion
是 29。
我还在清单文件中包含了这些权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.VIBRATE" />
2021-05-11 08:06:21.437 1335-1335/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.savior,PID: 1335
java.lang.RuntimeException: Unable to stop service com.example.savior.Ringer_modifier@a179014: java.lang.IllegalArgumentException: Receiver not registered: com.example.savior.Ringer_modifier$SMSreceiver@8da36b2
at android.app.ActivityThread.handleStopService(ActivityThread.java:4481)
at android.app.ActivityThread.access$2000(ActivityThread.java:252)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2124)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:238)
at android.app.ActivityThread.main(ActivityThread.java:7878)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:512)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1028)
Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.example.savior.Ringer_modifier$SMSreceiver@8da36b2
at android.app.LoadedApk.forgetReceiverdispatcher(LoadedApk.java:1519)
at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1570)
at android.content.Contextwrapper.unregisterReceiver(Contextwrapper.java:675)
at com.example.savior.Ringer_modifier.onDestroy(Ringer_modifier.java:50)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)