在启动时启动 Android 服务
Starting Android Service on Boot Time
我正在构建一个简单的服务应用程序,它在启动时 运行s。问题是我希望这个应用只是基于服务,不会有activity。我有 BrodcastReceiever class 和服务 class,但我不知道该服务如何在设备上运行。我将 运行 配置编辑为空。当我添加 activity 时,它起作用了 但正如我所说,这一定只是一个服务应用程序。为什么它不起作用?
manifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.TestService">
<service
android:name=".MyService"
android:enabled="true"
android:exported="true">
</service>
<receiver android:name=".BootDeviceReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
BroadcastReceiver.java
public class BootDeviceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("testLog","broadCast started");
if(Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())){
Intent intentService = new Intent(context,MyService.class);
intentService.setAction(Intent.ACTION_MAIN);
intentService.addCategory(Intent.CATEGORY_LAUNCHER);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
context.startForegroundService(intentService);
}else{
context.startService(intentService);
}
}
}
}
日志未显示在 onReceive 函数中。
感谢您的帮助。
这是不可能的。当您在设备上安装您的应用程序时,您的组件都处于“停止状态”。在“停止状态”时,它们不会被 Android 触发。为了使您的组件脱离此状态,用户必须至少手动启动您的应用程序一次。用户启动您的应用程序的唯一方法是启动 Activity
。用户启动 Activity
的唯一方法是在您的应用程序中有一个 Activity
,并在您的清单中有一个匹配的 <activity>
声明,带有 <intent-filter>
包含 ACTION=MAIN 和 CATEGORY=LAUNCHER.
我正在构建一个简单的服务应用程序,它在启动时 运行s。问题是我希望这个应用只是基于服务,不会有activity。我有 BrodcastReceiever class 和服务 class,但我不知道该服务如何在设备上运行。我将 运行 配置编辑为空。当我添加 activity 时,它起作用了 但正如我所说,这一定只是一个服务应用程序。为什么它不起作用?
manifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.TestService">
<service
android:name=".MyService"
android:enabled="true"
android:exported="true">
</service>
<receiver android:name=".BootDeviceReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
BroadcastReceiver.java
public class BootDeviceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("testLog","broadCast started");
if(Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())){
Intent intentService = new Intent(context,MyService.class);
intentService.setAction(Intent.ACTION_MAIN);
intentService.addCategory(Intent.CATEGORY_LAUNCHER);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
context.startForegroundService(intentService);
}else{
context.startService(intentService);
}
}
}
}
日志未显示在 onReceive 函数中。
感谢您的帮助。
这是不可能的。当您在设备上安装您的应用程序时,您的组件都处于“停止状态”。在“停止状态”时,它们不会被 Android 触发。为了使您的组件脱离此状态,用户必须至少手动启动您的应用程序一次。用户启动您的应用程序的唯一方法是启动 Activity
。用户启动 Activity
的唯一方法是在您的应用程序中有一个 Activity
,并在您的清单中有一个匹配的 <activity>
声明,带有 <intent-filter>
包含 ACTION=MAIN 和 CATEGORY=LAUNCHER.