Intereting Posts
Требуется ли Android GRALLOC? Ошибка 1 libavcodec.so Формат файла не распознан Android GL Live Wallpaper Почему определение Flowable я мог получать обновления БД Java.lang.Exception: пользовательский класс runner AndroidJUnit4 должен иметь открытый конструктор с сигнатурой AndroidJUnit4 (класс testClass) Есть ли сторонняя библиотека для Android Pinch Zoom RealmMigrationNeededException при изменении модели Realm Аннотация @UiThreadTest создает «java.lang.Exception: no runnable methods» Phonegap 3 – Оповещение о том, что если я нажму ok, то произойдет сбой broswer JSONObject в JSONObject Включить прокрутку в EditText, который находится в ScrollView Как перезапустить службу после получения Killed приложениями, такими как «Advanced Task Killer»? Android делает полноэкранный режим Dialog со строкой состояния, показывающей Есть ли порт для ImageMagick для Android? Как настроить IntelliJ для Mac, чтобы показать документацию на Java и Android в редакторе (офлайн, а не онлайн)? Активность Android без ActionBar

Как сохранить приложение переднего плана на 24/7?

Я изучаю, как сохранить приложение Android на переднем плане.

Это будет частное приложение, поэтому я могу сделать все возможное, чтобы он постоянно работал на устройстве (HDMI TV Stick)

Итак, как я могу убедиться, что приложение будет работать независимо от того, что? Приложение довольно легкое с точки зрения использования ресурсов, поэтому, если он работает 24/7, мы, надеюсь, не будем проблемой.

Я читал о постоянном параметре в манифесте, но похоже, что он может применяться только к системным приложениям?

Должен ли я сделать свое приложение системным приложением? Как я могу это сделать и это поможет?

Solutions Collecting From Web of "Как сохранить приложение переднего плана на 24/7?"

  • Если вы хотите использовать внешнее приложение: Autostart и StaY!

  • Если вы хотите сделать это программно, вы можете использовать службу, которая опросает каждые миллисекунды «x», чтобы узнать, находится ли ваше приложение на переднем плане. Если это не так, оно начнет / приведет ваше приложение на передний план. Делай это так:

    public class PersistService extends Service { private static final int INTERVAL = 3000; // poll every 3 secs private static final string YOUR_APP_PACKAGE_NAME = "YOUR_APP_PACKAGE_NAME"; private static boolean stopTask; private PowerManager.WakeLock mWakeLock; @Override public void onCreate() { super.onCreate(); stopTask = false; // Optional: Screen Always On Mode! // Screen will never switch off this way mWakeLock = null; if (settings.pmode_scrn_on){ PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "a_tag"); mWakeLock.acquire(); } // Start your (polling) task TimerTask task = new TimerTask() { @Override public void run() { // If you wish to stop the task/polling if (stopTask){ this.cancel(); } // The first in the list of RunningTasks is always the foreground task. RunningTaskInfo foregroundTaskInfo = activityManager.getRunningTasks(1).get(0); String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName(); // Check foreground app: If it is not in the foreground... bring it! if (!foregroundTaskPackageName.equals(YOUR_APP_PACKAGE_NAME)){ Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(YOUR_APP_PACKAGE_NAME); startActivity(LaunchIntent); } } }; Timer timer = new Timer(); timer.scheduleAtFixedRate(task, 0, INTERVAL); } @Override public void onDestroy(){ stopTask = true; if (mWakeLock != null) mWakeLock.release(); super.onDestroy(); } } 

В приведенном выше коде также есть «опция», чтобы заставить экран оставаться на месте! Конечно, вам понадобятся следующие разрешения:

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

И не забудьте также зарегистрировать свой сервис:

  <service android:name="YOURPACAKGE.PersistService" android:enabled="true"/> 

Этого нелегко достичь, поскольку приложения на переднем плане технически не должны работать без остановок. Также, если у android заканчивается память, он начнет убивать приложения, которые представляют наименьший риск, который затем потребует перезапуска приложения.

Как уже упоминалось, вы можете сделать это системным приложением, но я думаю, вам нужно укоренить устройство или создать собственный ПЗУ и сделать свое приложение частью ПЗУ. Наверное, это не лучшее решение для ваших нужд, хотя мало кто сможет выпустить ПЗУ на свои устройства.

Я думаю, что самым простым решением было бы добавить манифест, что ваше приложение будет заменой домашнего экрана, то есть приложением для запуска. Я не знаю точного кода с верхней части головы, но это пойдет в раздел приложения в манифесте android. Это означает, что как только устройство загрузится, или пользователь нажмет кнопку «домой», они будут отправлены в ваше приложение.

использовать это:

 import android.os.PowerManager; public class MyActivity extends Activity { protected PowerManager.WakeLock mWakeLock; /** Called when the activity is first created. */ @Override public void onCreate(final Bundle icicle) { setContentView(R.layout.main); /* This code together with the one in onDestroy() * will make the screen be always on until this Activity gets destroyed. */ final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); this.mWakeLock.acquire(); } @Override public void onDestroy() { this.mWakeLock.release(); super.onDestroy(); } } 

И в манифесте:

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

Видно здесь: как сохранить экран в своем приложении?

Вы могли бы сделать свое приложение в качестве запуска, добавив 2 <intent-filter> категории в теги <intent-filter> :

  <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.HOME"/> 

То вы должны всегда проверять, есть ли другое приложение, выполняемое сверху, запустить следующий код, чтобы направить пользователя в наше приложение:

  Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); 

Я пробовал это решение, но он не может скрывать приложения, которые используются сверху, например, чат Facebook Messenger.

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

 //Your activity @Override public void onPause() { super.onPause(); if (yourservice != null) { yourservice.validateActivityOnPause(); } } 

И в validateActivityOnPause () есть что-то вроде:

 //Your service public void validateLynxActivityOnPause() { //Do some stuff here Intent startActivityIntent = new Intent(this, LynxActivity.class); startActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.startActivity(startActivityIntent); }