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

Существует довольно много примеров использования BOOT_COMPLETED для запуска приложения при загрузке устройства. Я пытался использовать этот пример против моего приложения Flutter.Имея это запустить приложение.Это просто приложение для вывесок, которое показывает изображения.В основном аналогичен рамке рисунка.

В приведенном ниже примере кода приложение компилируется, однако, когда я, например, перезагружаю симулятор, код не оказывает никакого влияния.

Я предполагаю, что я не вызываю правильный код для фактического запуска приложения. Я не девалопер для Android, так что у меня есть вопрос, что именно происходит.Далее следует манифест ..

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="au.net.digitall.cmplayer">

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

<application
    android:name="io.flutter.app.FlutterApplication"
    android:label="cm_player"
    android:icon="@mipmap/ic_launcher"
    tools:ignore="GoogleAppIndexingWarning">
    <activity
        android:name=".MainActivity"
        android:launchMode="singleTop"
        android:theme="@style/cmTheme2"
        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
        android:hardwareAccelerated="true"
        android:windowSoftInputMode="adjustResize">

        <meta-data
            android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
            android:value="true" />
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <receiver
        android:enabled="true"
        android:name=".StartCmPlayerServiceAtBootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
</application>

Затем класс StartCmPlayerServiceAtBootReceiver для запуска приложения.

package au.net.digitall.cmplayer;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;


public class StartCmPlayerServiceAtBootReceiver extends BroadcastReceiver {

    private static final String TAG = StartCmPlayerServiceAtBootReceiver.class.getSimpleName();

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "BOOT detected");
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent serviceIntent = new Intent(context, MainActivity.class);
            context.startService(serviceIntent);
        }
    }
}

Все это компилируется и запускается, но при перезагрузке ничего не происходит.Оцените помощь ..

1 Ответ

0 голосов
/ 12 декабря 2018

Большое спасибо Майку М. Его предложение и указание на другое обсуждение на базе Android дало мне достаточно информации для архивирования автозапуска при загрузке.Ниже приведено изменение кода в приведенном выше примере.

В классе StartCmPlayerServiceAtBootReceiver измените значение на

public void onReceive(Context context, Intent intent) {
    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        Intent mIntent = new Intent(context, MainActivity.class);
        mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(mIntent);
    }
}

Еще раз спасибо, и я надеюсь, что другие разработчики флаттера найдут это полезным.

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