2013-04-05 148 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 

我不能轉化爲在Python startActivity調用此。

關於打開Twitter客戶端的a different question的回答很好,但我不知道如何擴展該代碼。例如,您將如何添加腳本路徑,以及您將在哪裏放置行com.googlecode.android_scripting/.activity.ScriptingLayerServiceLauncher

+0

您是否檢查了此鏈接?:http://norwied.wordpress.com/2012/04/11/run-sl4a-python-script-from-within-android-app/ – eazar001 2013-04-05 03:08:39

+0

我還沒有看到但是,儘管一些代碼看起來很熟悉 - 我可以將這些文件「Intent.java」等導入到我的python腳本中,然後執行「Intent i = blah」嗎? – 2013-04-05 12:55:29

+0

如果你正在談論'IntentBuilders。Java',SL4A爲您提供了下載鏈接,所有必要的下載都在我提供的頁面上提供。 – eazar001 2013-04-05 21:38:59

回答

0

經過許多失敗的嘗試之後,我現在已經在Ruby中工作了 - 我比使用Python更容易生成JSON extras。

重要! 在命令行版本,你打電話「com.googlecode.android_scripting/.activity.ScriptingLayerServiceLauncher」

從腳本中,這被稱爲「com.googlecode.android_scripting.activity.ScriptingLayerServiceLauncher」,而削減。留在斜線崩潰sl4a。

[代碼]

需要 '機器人' 需要 'JSON /純'

d = Android.new

腳本= '/ SD卡/ SL4A /腳本/ YOUR_SCRIPT'

data = {「com.googlecode.android_scripting.extra.SCRIPT_PATH」=> script}

extras = JSON.generate(data)

d.startActivity( 'com.googlecode.android_scripting.action.LAUNCH_BACKGROUND_SCRIPT', '', '',數據,真實, 'com.googlecode.android_scripting', 'com.googlecode.android_scripting.activity.ScriptingLayerServiceLauncher')

[/ code]

我希望這有助於!

+0

我在事後發佈的代碼是正確的,並且解決了問題 - 除了我不熟悉我很少使用的語言之外,這裏沒有任何失敗。這就是說,對Python比較熟悉,我不應該在翻譯我發佈的代碼時遇到麻煩。 – 2013-07-10 14:53:40

+0

但這不是問題的答案,這是如何工作的。問題是Python的具體問題,並有Python標籤。你應該創建一個關於如何在Ruby中完成的新問題,並在那裏回答你自己的問題。其他人可能會有更好的答案,如何在Ruby中做到這一點。 – 2015-02-17 15:32:59

2

此功能將從另一個啓動任何SL4A腳本。

第一個參數應該是要啓動的腳本的路徑。該腳本可以是您安裝瞭解釋器的任何語言。

第二個參數是可選的,應該是一個布爾值。它默認爲False。它控制終端是否可見,以便您可以看到輸出和錯誤。它不影響腳本是否具有UI。

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

斷開的鏈接。的Ba-DA-PEE鬥。 – 2014-08-12 22:57:54

+0

我找到了我的原始代碼,因此更新了包含代碼並修復鏈接的答案。 – 2014-11-22 18:32:50