【问题标题】:Launch an SL4A script from an SL4A script从 SL4A 脚本启动 SL4A 脚本
【发布时间】:2013-04-05 02:09:08
【问题描述】:

我想从不同的 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 调用。

a different question 打开 Twitter 客户端的答案效果很好,但我不知道如何扩展该代码。例如,您将如何添加脚本路径,以及将com.googlecode.android_scripting/.activity.ScriptingLayerServiceLauncher 这一行放在哪里?

【问题讨论】:

  • 你检查过这个链接了吗?:norwied.wordpress.com/2012/04/11/…
  • 我还没有看到,虽然有些代码看起来很熟悉 - 我可以将这些文件“Intent.java”等导入我的 python 脚本,然后执行“Intent i=废话”?
  • 如果您在谈论IntentBuilders.Java,SL4A 为您提供下载链接,所有必要的下载都在我给您的那个页面上提供。
  • 你发给我的链接谈到了编写一个 java 应用程序,似乎没有解释任何与在 sl4a 中形成意图相关的内容。抱歉,我已经读了四五遍了。
  • stackoverflow.com/q/18710318/3157779 stackoverflow.com/a/13780483/3157779 从另一个启动脚本。像 python 这样的语言有内置函数来调用其他脚本

标签: android python sl4a start-activity


【解决方案1】:

此函数将从另一个脚本中启动任何 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

【讨论】:

  • 链接断开。 Ba-da-pee-doo。
  • 我找到了我的原始代码,所以更新了答案以包含代码并修复了链接。
【解决方案2】:

经过多次失败的尝试,我现在可以在 Ruby 中使用它了 - 与在 Python 中相比,我更容易通过这种方式生成 JSON 附加内容。

重要! 在命令行版本中,您调用“com.googlecode.android_scripting/.activity.ScriptingLayerServiceLauncher”

在脚本中,这称为“com.googlecode.android_scripting.activity.ScriptingLayerServiceLauncher”,不带斜线。离开斜线会导致 sl4a 崩溃。

[代码]

需要'android' 需要'json/pure'

d=Android.new

script = '/sdcard/sl4a/scripts/YOUR_SCRIPT'

数据 = {"com.googlecode.android_scripting.extra.SCRIPT_PATH"=>脚本}

附加 = JSON.generate(数据)

d.startActivity('com.googlecode.android_scripting.action.LAUNCH_BACKGROUND_SCRIPT','','',data,true,'com.googlecode.android_scripting','com.googlecode.android_scripting.activity.ScriptingLayerServiceLauncher')

[/代码]

我希望这会有所帮助!

【讨论】:

  • 事后我贴的代码是正确的,并且解决了问题-这里没有失败,除了我对我很少使用的语言不熟悉。话虽如此,你更熟悉Python 翻译我发布的代码应该没有问题。
  • 但这不是问题的答案,这就是 SO 的工作原理。这个问题是 Python 特有的,并且有 Python 标签。您应该创建一个关于如何在 Ruby 中执行此操作的新问题,并在那里回答您自己的问题。对于如何在 Ruby 中执行此操作,其他人可能也有更好的答案。
猜你喜欢
  • 2012-09-26
  • 2011-03-17
  • 2014-08-07
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多