2013-04-05 3 views
2

Я хотел бы запустить фоновый скрипт SL4A (на удаленном устройстве) из другого сценария SL4A. Я могу запустить скрипт из терминала, выполнив что-то вроде этого:Запустить скрипт SL4A из сценария SL4A

$ am start -a \ 
com.googlecode.android_scripting.action.LAUNCH_BACKGROUND_SCRIPT -n \ 
com.googlecode.android_scripting/.activity.ScriptingLayerServiceLauncher -e \ 
com.googlecode.android_scripting.extra.SCRIPT_PATH /sdcard/sl4a/scripts/main.py 

Я не могу перевести это в startActivity вызов в Python.

Ответ на a different question при открытии клиента Twitter работает красиво, но я не знаю, как продлить этот код. Например, как бы вы добавили путь к скрипту и где бы вы поместили строку com.googlecode.android_scripting/.activity.ScriptingLayerServiceLauncher?

+0

Вы еще не проверяли эту ссылку ?: http://norwied.wordpress.com/2012/04/11/run-sl4a-python-script-from-within-android-app/ – eazar001

+0

Я не видел этого однако, хотя некоторые из кода выглядят знакомыми - могу ли я импортировать эти файлы «Intent.java» и т. д. в мои сценарии python, а затем сделать «Intent i = blah»? –

+0

Если вы говорите о 'IntentBuilders.Java', SL4A предоставляет вам ссылку для загрузки, все необходимые загрузки предоставляются на той странице, которую я вам дал. – eazar001

ответ

0

После многих неудачных попыток, теперь у меня это работает в Ruby - мне легче было создавать дополнительные функции JSON таким образом, как в Python.

Важно! В версии командной строки, вы звоните на «com.googlecode.android_scripting/.activity.ScriptingLayerServiceLauncher»

из сценария, это называется как «com.googlecode.android_scripting.activity.ScriptingLayerServiceLauncher», без слэш. Оставляя в косой чертой sl4a.

[код]

требует 'Android' требует 'JSON/чистый'

д = Android.new

сценария = '/ SDCard/SL4A/скрипты/YOUR_SCRIPT'

данных = { "com.googlecode.android_scripting.extra.SCRIPT_PATH" => скрипт}

дополнения = JSON.generate (данные)

d.startActivity ('com.googlecode.android_scripting.action.LAUNCH_BACKGROUND_SCRIPT', '', '', данные, правда, 'com.googlecode.android_scripting', 'com.googlecode.android_scripting.activity.ScriptingLayerServiceLauncher')

[/ code]

Надеюсь, это поможет!

+0

Код, который я опубликовал после того, как факт верен, и решил проблему - здесь нет провала, за исключением моего незнания языка, который я редко использую. я больше знаком с Python, чем мне не пришлось бы переводить код, который я опубликовал. –

+0

Но это не ответ на вопрос, каким образом SO работает. Вопрос касается Python и имеет тег Python. Вы должны создать новый вопрос о том, как это сделать в Ruby, и ответить на свой собственный вопрос. У других людей могут быть лучшие ответы, как это сделать в Ruby. –

2

Эта функция запускает любой скрипт SL4A из другого.

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

Второй аргумент является необязательным и должен быть bool. По умолчанию он равен False. Он контролирует, будет ли терминал видимым, чтобы вы могли видеть выходные данные и ошибки. Это не влияет на то, имеет ли сценарий пользовательский интерфейс или нет.

from android import Android 
droid = Android() 

def launch_script(path, visible=False): 

    visibilty = 'FORE' if visible else 'BACK' 
    activity = 'com.googlecode.android_scripting.action.LAUNCH_{0}GROUND_SCRIPT'.format(visibilty) 
    extras  = {'com.googlecode.android_scripting.extra.SCRIPT_PATH': path} 
    packagename = 'com.googlecode.android_scripting' 
    classname = 'com.googlecode.android_scripting.activity.ScriptingLayerServiceLauncher' 
    intent  = droid.makeIntent(activity, None, None, extras, None, packagename, classname).result 

    droid.startActivityIntent(intent) 

Есть gist for this code here.

+0

Неработающая ссылка. Ба-да-пи-ду. –

+0

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