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

У меня есть служба переднего плана, которая должна работать после перезагрузки.Есть 3 версии перезагрузки.а) Пользователь нажал на кнопку «Перезагрузить».б) Пользователь нажал кнопку питания, затем через некоторое время нажал кнопку питания в) Батарея разрядилась.Пользователь зарядил и запустил телефон.Мой код работает для а) и б) без каких-либо проблем.Для в) он работает пару раз, а затем не запускается.Нет сообщений о сбое в магазине Google.Если я удаляю данные из моего приложения на телефоне и перезагружаю телефон, то моя служба запускается.Я предполагаю, что когда батарея разряжается, иногда onDestroy моего сервиса может не вызывать. Но я не понимаю, как он может заблокировать мой сервис для запуска.

 The following manifest.
<?xml version="1.0" encoding="UTF-8"?>
<manifest package="bla.bla.bla.bla"   
 xmlns:android="http://schemas.android.com/apk/res/android">
 <uses-permission 
 android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 <uses-permission 
 android:name="android.permission.ACCESS_FINE_LOCATION"/>
 <uses-permission 
 android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 <uses-permission 
 android:name="android.permission.ACCESS_NETWORK_STATE"/>
 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.WAKE_LOCK"/>
 <application android:theme="@style/AppTheme" android:supportsRtl="true" 
 android:roundIcon="@mipmap/ic_launcher_round" 
 android:label="@string/app_name" android:icon="@mipmap/ic_launcher" 
 android:allowBackup="true">
 <activity android:name=".MainActivity" 
 android:theme="@style/AppTheme.NoActionBar" 
 android:label="@string/title_activity_main">
 <intent-filter>
 <action android:name="android.intent.action.MAIN"/>
 <category android:name="android.intent.category.LAUNCHER"/>
 </intent-filter>
 </activity>
 <service android:name="bla.bla.bla.bla.AndroidLocationServices"/>
 <receiver android:name="AlarmReceiver">
 <intent-filter>
 <action android:name="android.intent.action.BOOT_COMPLETED"/>
 </intent-filter>
 </receiver>
 </application>
 </manifest>

 The following class starts my service after boot. 
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Build;
 public class AlarmReceiver extends BroadcastReceiver {
 public AlarmReceiver() {
    // TODO Auto-generated constructor stub
 }
 @Override
 public void onReceive(Context context, Intent arg1) {
 Toast.LENGTH_SHORT).show();
    //context.startService(new Intent(context, 
 AndroidLocationServices.class));
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        context.startForegroundService(new Intent(context, 
 AndroidLocationServices.class));
    else
        context.startService(new Intent(context, 
 AndroidLocationServices.class));
 }
 }
 The following some methods of my service class. 
 @Override
 public void onCreate() {
     super.onCreate();
     PowerManager pm = (PowerManager) 
 getSystemService(this.POWER_SERVICE);
    try {
        wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
"tag:DoNotSleep");
        wakeLock.acquire();
    }
    catch (NullPointerException exception)
    {
    }     
 }
 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        Notification.Builder builder = new Notification.Builder(this, 
 "MY_CHANNEL")
                .setContentTitle(getString(R.string.app_name))
                .setContentText("MY TRACK")
                .setAutoCancel(true);
        Notification notification = builder.build();
        startForeground(1, notification);
    } else {
        NotificationCompat.Builder builder = (NotificationCompat.Builder) 
 new NotificationCompat.Builder(this)
                .setContentTitle(getString(R.string.app_name))
                .setContentText("MY TRACK")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setAutoCancel(true);
        Notification notification = builder.build();
        startForeground(1, notification);
    }
    locationManager = (LocationManager) getApplicationContext()
            .getSystemService(Context.LOCATION_SERVICE);
       if (ActivityCompat.checkSelfPermission(this, 
 Manifest.permission.ACCESS_FINE_LOCATION) != 
 PackageManager.PERMISSION_GRANTED && 
 ActivityCompat.checkSelfPermission(this, 
 Manifest.permission.ACCESS_COARSE_LOCATION) != 
 PackageManager.PERMISSION_GRANTED)
         return START_STICKY;
    }
    //Here appropriate code is placed. It is deleted.
     return START_STICKY;
    }
  @Override
  public void onDestroy() {
    super.onDestroy();
    if ((wakeLock!=null)&&(wakeLock.isHeld()))
    wakeLock.release();
  }

 No error messages.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...