我已经创建了 SMS Receiver 应用程序...但我想将它创建为一项服务,它应该在后台运行(即此应用程序没有单独的 UI,希望像警报应用程序一样工作),即使移动设备重新启动它也会自动启动。 ..有人可以帮忙吗?
我以前的 SMS Receiver 应用程序代码在这里 Unable to instance activity ComponentInfo in Android Receive Sms App
我已经创建了 SMS Receiver 应用程序...但我想将它创建为一项服务,它应该在后台运行(即此应用程序没有单独的 UI,希望像警报应用程序一样工作),即使移动设备重新启动它也会自动启动。 ..有人可以帮忙吗?
我以前的 SMS Receiver 应用程序代码在这里 Unable to instance activity ComponentInfo in Android Receive Sms App
它应该在后台运行
您现有BroadcastReceiver
的(未记录的)android.provider.Telephony.SMS_RECEIVED
已经在后台运行。
即使手机重新启动它也会自动启动
设备重新启动后,您现有BroadcastReceiver
的(未记录的)android.provider.Telephony.SMS_RECEIVED
已经可用。
如果你希望你的服务在手机启动时运行,你应该简单地用这个意图过滤器声明一个广播接收器:
<receiver android:name="MyStartupIntentReceiver">
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
在广播接收器 onReceive() 方法中,只需启动您的服务:
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("myPackage.MyService");
context.startService(serviceIntent);
}
并确保将清单中的服务与您在广播接收器中启动的意图的相同名称链接:
<service android:name="MyService">
<intent-filter>
<action
android:name="myPackage.MyService" />
</intent-filter>
</service>
正如 CommonsWare 所说,实际上不需要在后台运行“服务”来接收 SMS 广播,如果在清单中正确注册,则使用“android.provider.Telephony.SMS_RECEIVED”作为意图过滤器的 BroadcastReceiver 将触发每次收到 SMS 时都不需要其他操作。
根据您到底想要做什么,您可以从该广播接收器通过实际服务工作,或者可能更好的选择是使用 IntentService。这是因为用于广播的线程在启动后不久就会被杀死,所以你不应该在其中做任何大量的工作。
通常建议不要使用实际的“服务”,除非明确要求....但如果这是您需要的,那么您需要 Davide 应该为您提供正确的方向。