首页 > 解决方案 > 挡屏时后台服务关闭,仅限华为

问题描述

我创建了一个带有前台服务的警报。它运行良好。它适用于所有手机,但不适用于华为,该服务在屏幕锁定时关闭。有没有人有任何想法来解决它?请帮忙。

这是我的代码的一部分:

public class ServiceWakeUp extends Service {
    ServiceWakeUp activity;

    MediaPlayer mediaPlayer;

    String fname = "cheerful_2", wakeups = "";
    AudioManager audio;
    Dialog dia;

    Thread runner2;
    Handler handler = new Handler(Looper.getMainLooper());
    final Runnable updater = new Runnable() {
        public void run() {
            StartService();
        }
    };
    SharedPreferences preferences;

    int elapsed;
    //PowerManager pm;
    //PowerManager.WakeLock wl;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        SelectClasses select = new SelectClasses(activity);
        wakeups = select.getCalendarsSaved("");
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        activity = this;
        getInitialNotifForForeground();
        mediaPlayer = new MediaPlayer();
        dia = new Dialog(activity);
        //mantenim la CPU encesa
        //pm = (PowerManager)getApplicationContext().getSystemService(getApplicationContext().POWER_SERVICE);
        // wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,getPackageName());
        // wl.acquire();

        preferences = PreferenceManager.getDefaultSharedPreferences(this);

        int resID = getResources().getIdentifier(fname, "raw", getPackageName());
        mediaPlayer = MediaPlayer.create(this, resID);

        audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        for(int a = 0;a < 5;a++)
            audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
        audio.setSpeakerphoneOn(true);
        audio.setMode(AudioManager.MODE_IN_COMMUNICATION);

        SelectClasses select = new SelectClasses(activity);
        wakeups = select.getCalendarsSaved("");
        elapsed = preferences.getInt("runner",0);
    }
}

和这里。您可以看到广播接收器:

public class ReceiverBoot extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        SelectClasses select = new SelectClasses(context);

        if(select.existActivedWakeup()){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                context.startForegroundService(new Intent(context, ServiceWakeUp.class));
            } else {
                context.startService(new Intent(context, ServiceWakeUp.class));
            }
        }
    }
}

标签: androidservicebackgroundhuawei-mobile-services

解决方案


也许你需要配置应用启动设置,试试这个:

val intent = Intent()
intent.component = ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity")
try {
    startActivity(intent)
} catch (ex: ActivityNotFoundException) {
    // Fallback to global settings
    startActivity(Intent(Settings.ACTION_SETTINGS))
}

推荐阅读