gpt4 book ai didi

android - 如何创建在启动序列完成后启动服务的应用程序?

转载 作者:行者123 更新时间:2023-11-30 05:04:59 25 4
gpt4 key购买 nike

我想创建一个在重启后启动服务的应用程序,但我不想显示用户界面——就像服务在后台静默运行一样。我可以创建它,但重新启动后应用程序崩溃了。因为,MainActivity 尚未启动,我不想启动任何 Activity 。我该如何解决这个问题?

我的 manifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.galleryapp">

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.CAMERA" />

<application
android:name=".App"
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/AppTheme">

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<receiver
android:name=".CameraEventReceiver"
android:enabled="false">
<intent-filter>
<action android:name="com.android.camera.NEW_PICTURE" />
</intent-filter>
</receiver>

<receiver android:name="com.galleryapp.RebootDeviceReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

<service
android:name=".BackgroundService"
android:exported="true" />

</application>

还有我的接收器类:

public class RebootDeviceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

Intent serviceIntent = new Intent(context, BackgroundService.class);
context.startService(serviceIntent);

}
}

最佳答案

您需要编写一个 BroadcastReceiver 并将其注册到您的 list 文件中。

<receiver android:name="your.package.BootCompletedReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

然后您可以从您的 BroadcastReceiver 启动服务。例如,在我的代码中,我使用了 JobIntentService

public class BootCompletedReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
Intent msgIntent = new Intent(context, MyJobIntentService.class);
msgIntent.setAction(MyJobIntentService.ACTION_RESCHEDULE);
MyJobIntentService.enqueueWork(context, msgIntent);
}
}

如果您希望您的服务运行更长时间,您需要将其作为前台服务运行,至少对于较新的 Android 版本而言。

关于android - 如何创建在启动序列完成后启动服务的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54731117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com