Android сервис не запускается все время после перезагрузки - PullRequest
0 голосов
/ 04 декабря 2018

Я хочу запустить сервис после перезагрузки.У меня проблема в том, что это происходит не каждый раз (по крайней мере, первые 20 минут).Я изучил много вопросов в stackoverflow и попробовал ряд предоставленных решений, однако иногда сервис не запускается автоматически после перезагрузки.Также я должен добавить еще один параметр этого сервиса переднего плана для версий Android O и выше.Кто-нибудь может дать мне какой-нибудь совет?

AndroidManifest.xml

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

<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=".Activities.MainActivity"
        ....
    </activity>


    <activity
        ...
    </activity>
    <receiver android:name=".Helpers.BootCompletedIntentReceiver" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
     <!--  I think that this is also not necessery     <category android:name="android.intent.category.DEFAULT" /> -->
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
        </intent-filter>
    </receiver>
    <service
        android:name=".Services.myService"
        android:enabled="true"
        android:exported="true"></service>

</application>

BroadcastReciever

package com.abc.Helpers;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Build;
    import android.support.v4.content.ContextCompat;
    import android.util.Log;
    import com.abx.Activities.MainActivity;
    import com.abc.Services.myService;
public class BootCompletedIntentReceiver extends BroadcastReceiver {

private static final String TAG = "MyBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        Intent serviceIntent = new Intent(context, myService.class);
        serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            ContextCompat.startForegroundService(context,serviceIntent);
        } else {
            context.startService(serviceIntent);
        }
    } 
}

Я также нашелв комментарии здесь этот получатель должен быть зарегистрирован в активности приложения, и это код в Mainactivity.Вы согласны?

     @Override
    protected void onCreate(Bundle savedInstanceState) {
...
final ComponentName onBootReceiver = new ComponentName(getApplication().getPackageName(), BootCompletedIntentReceiver.class.getName());
        if(getPackageManager().getComponentEnabledSetting(onBootReceiver) != PackageManager.COMPONENT_ENABLED_STATE_ENABLED)
            getPackageManager().setComponentEnabledSetting(onBootReceiver,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);
..
}
...