我如何在python kivy / jnius中使用service中的startActivity方法?

时间:2017-02-15 15:40:40

标签: android python kivy start-activity pyjnius

我想在我的Android应用程序(python 2.7& kivy)中从服务开始一项活动。我使用startActivity方法但它不起作用。

当我运行应用程序并输入" buildozer android logcat" 时,我看到了:

File" jnius_export_class.pxi",第900行,在jnius.jnius.JavaMultipleMethod .__ call __(jnius / jnius.c:24581) JavaException:没有与您的参数匹配的方法

我的部分服务代码:

resources :products, only:[:index] do
  resources :orders, :path => 'order', only:[:new, :create],
    path_names: {new: ""}
end

如果我将它移动到主活动并使用PythonActivity.mActivity,它可以工作。但我需要从服务中精确运行此代码。 请帮忙。

1 个答案:

答案 0 :(得分:0)

首先,对于kivy,它改为org.kivy.android.PythonActivity而不是renpy。 (您正确启动了活动;)) 从网上某处拍摄。我只是不记得在哪里。学分应该归其他人所有。无论如何,这是示例代码。

PythonActivity =  autoclass("org.kivy.android.PythonActivity") 
Intent = autoclass('android.content.Intent')
pm = autoclass('android.content.pm.PackageManager')
activity = PythonActivity.mActivity
pm_ = activity.getPackageManager()
array_pkg = pm_.getInstalledApplications(pm.GET_META_DATA).toArray()

print "\ninstalled app:"
selected_pkg = []
list_exitsting = []
for i in array_pkg:
    if "/data/app/" not in getattr(i, "publicSourceDir"):
        continue
    selected_pkg.append(i)
    print "packageName = " + getattr(i, "packageName")
    list_exitsting.append(getattr(i, "packageName"))
print "\nget app intent"

app_to_launch = "com.google.android.youtube"

for i in selected_pkg:
    if app_to_launch == getattr(i, "packageName"):
        app_intent = pm_.getLaunchIntentForPackage(getattr(i, "packageName"))
        app_intent.setAction(Intent.ACTION_VIEW)
        app_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        print "launch app: " + app_to_launch
        activity.startActivity(app_intent)