我创建了SMS Receiver应用程序...但我想将其创建为服务,它应该在后台运行(即没有针对此应用程序的单独UI,希望像警报应用程序一样工作),即使移动设备重新启动它自动启动...可以帮助吗?
我之前的SMS Receiver应用程序代码在这里 Unable to instantiate activity ComponentInfo in Android Receive Sms App
答案 0 :(得分:3)
它应该在后台运行
(未记录的)BroadcastReceiver
的现有android.provider.Telephony.SMS_RECEIVED
已在后台运行。
即使移动重启,它也会自动启动
设备重新启动后,您的现有BroadcastReceiver
(未记录的)android.provider.Telephony.SMS_RECEIVED
已经可用。
答案 1 :(得分:1)
如果您希望自己的服务在手机启动时运行,您只需使用此意图过滤器声明广播接收器:
<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>
答案 2 :(得分:0)
由于CommonsWare已经表示没有必要在后台运行“服务”来接收短信广播,如果在您的清单中正确注册了您的BroadcastReceiver并将“android.provider.Telephony.SMS_RECEIVED”作为意图每次收到短信时都会触发过滤器,无需其他操作。
根据您想要做什么,从广播接收器,您可以通过实际服务工作,或者更好的选择是使用IntentService。这是因为用于广播的线程将在启动后不久被杀死,因此您不应该在其中进行任何大量的工作。
除非明确要求,否则通常建议不要使用实际的“服务”......但如果这就是您所需要的,那么您需要Davide为您找到正确的方向。