Запустить сценарий оболочки в фоновом процессе независимо от того, какая активность на переднем плане?

У меня есть сценарий оболочки, который выглядит следующим образом:

# /mnt/sdcard/touch.sh
sleep 10

while [ 1 ]; do
    input swipe 700 380 1020 600 1000
    input tap 960 540
    input swipe 1220 700 900 480 1000
    input tap 960 540
    input swipe 1220 700 900 480 1000
    input tap 960 540
    input swipe 700 380 1020 600 1000
    input tap 960 540
done

Если я запускаю его из Terminal IDE (эмулятор терминала), он работает только тогда, когда Terminal IDE находится на переднем плане, поэтому я подумал, что сделаю реальное приложение, чтобы выполнять его и поддерживать его работу в фоновом режиме. Вот что у меня есть сейчас:

package com.mycompany.myapp;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import java.io.*;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            // RIGHT HERE. WHY DOES NOTHING HAPPEN?
            Runtime.getRuntime().exec(new String[]{"/system/bin/sh", "/mnt/sdcard/touch.sh", });
        }
        catch (IOException e) {/*...*/}
    }
}

Но это ничего не делает.

Итак, как мне выполнить это, а затем оставить его работающим в фоновом режиме, чтобы касания и прокрутки происходили, пока другое приложение находится на переднем плане? Вы поняли идею. :D

Этот вопрос нельзя закрывать как оффтоп. Он просто пытался решить это через приложение для письма, но его вопрос совсем не об этом.

Ответы (1)

Это сработало, просто sh /mnt/sdcard/touch.sh &запустив оболочку с расширением adb shell. Затем, когда я принудительно закрыл терминал, пока процесс находился в фоновом режиме, процесс продолжал работать в фоновом режиме моего телефона, как и ожидалось. Позже я смог убить процесс, adb shellнайдя psидентификатор процесса и kill -s KILL <ID>уничтожив его.

По сути, оказалось, что мне не нужно было создавать приложение для Android только для того, чтобы мой скрипт работал в фоновом режиме. Столкновение на ...

Мне любопытно, каковы различные версии поведения Android. Я написал сценарий для регистрации уровня заряда батареи, который работает в бесконечном цикле - и я обнаружил, что если я начну разветвляться, как вы, & - и вытащу USB-кабель... что он на самом деле останавливается... но возобновляется, если я возвращаю USB-кабель .
были те же потребности, ответ мне очень помог! но... как ни странно, только внутри adb shellя смог сделать это без рута. при запуске одного и того же скрипта в приложении терминала Android я мог добиться того же эффекта (чтобы на самом деле немного поработать ) только после активации root с помощью su! какие-нибудь подсказки, почему это может быть?