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