Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在android应用程序中使用外部应用程序打开SGF文件?_Python_Android_Kivy - Fatal编程技术网

Python 如何在android应用程序中使用外部应用程序打开SGF文件?

Python 如何在android应用程序中使用外部应用程序打开SGF文件?,python,android,kivy,Python,Android,Kivy,我正在尝试在一个外部应用程序中打开一个SGF文件(一种流行的存储围棋游戏的格式)。我当前的代码成功地启动了一个应用程序,但默认情况下无法加载它。我似乎无法改变这种行为 使用其他应用程序打开文件时,会出现不一致的行为。文件浏览器显示没有能够打开sgf文件的应用程序,并将我重定向到play store(无论我随后安装了哪些应用程序)。但是,internet浏览器会弹出一个弹出窗口,告诉我从2个合适的应用程序中选择一个。我希望在我的应用程序中有相同的行为,用户可以显式选择要打开的应用程序 我当前的代码

我正在尝试在一个外部应用程序中打开一个SGF文件(一种流行的存储围棋游戏的格式)。我当前的代码成功地启动了一个应用程序,但默认情况下无法加载它。我似乎无法改变这种行为

使用其他应用程序打开文件时,会出现不一致的行为。文件浏览器显示没有能够打开sgf文件的应用程序,并将我重定向到play store(无论我随后安装了哪些应用程序)。但是,internet浏览器会弹出一个弹出窗口,告诉我从2个合适的应用程序中选择一个。我希望在我的应用程序中有相同的行为,用户可以显式选择要打开的应用程序

我当前的代码(它似乎打开了一个应用程序,显示了一条消息“加载失败”,然后退出,没有遇到异常):


我如何更改它以获得带有应用程序选择的弹出窗口?

您安装了哪些应用程序可以处理此类文件?@blackapps我有Ah Q Go(尝试打开文件但失败,尽管它可以很好地处理web下载)和BWGo Free(一个通常工作的SGF阅读器)
intent.setDataAndType(Uri.parse(文件)
。文件的完整路径是什么?现在你不能再使用文件uri了。即使在用户可以选择应用程序之前,它也会导致文件uri ExposedException。你应该使用文件提供商。它是一个本地路径,例如“problems/1a.tsumego初学者/CHO CHIKUN Encyclopedia Life And Death-Elementary/prob0018.sgf”将其更改为绝对路径确实会导致有关暴露文件的异常。查看此文件提供程序,它似乎需要在kivy应用程序中似乎不可用的XML文件。您安装了哪些应用程序可以处理此类文件?@blackapps I have Ah Q Go(尝试打开文件但失败,尽管它可以很好地处理web下载)和BWGo Free(一个通常工作的SGF阅读器)
intent.setDataAndType(Uri.parse(file)
。文件的完整路径是什么?现在你不能再使用文件Uri了。甚至在用户可以选择应用程序之前,它会导致FileUriExposedException。你应该改用FileProvider。它是一个本地路径,例如。“problems/1a.tsumego初学者/CHO CHIKUN Encyclopedia Life And Death-Elementary/prob0018.sgf”将其更改为绝对路径确实会导致暴露文件的异常。查看此文件提供程序,它似乎需要在kivy应用程序中似乎不可用的XML文件。
file = self.files[self.file_ix]
if platform == "android":
    from jnius import autoclass

    Intent = autoclass("android.content.Intent")
    Uri = autoclass('android.net.Uri')
    PythonActivity = autoclass("org.renpy.android.PythonActivity")
    try:
        intent = Intent()
        intent.setAction(Intent.ACTION_VIEW)
        intent.setDataAndType(Uri.parse(file), "application/x-go-sgf")
        PythonActivity.mActivity.startActivity(intent)
    except Exception as e:
        self.hint.text = f"No SGF Viewer found: {e}"
else:
    os.system(f"xdg-open '{file}'")