问题标签 [pyjnius]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
256 浏览

python - 使用 jnius 在 Kivy/Android 应用程序中打开日期设置

我正在尝试翻译这段 Java 代码

到 Kivy,所以我可以打开 Android 日期设置对话框。到目前为止,我尝试过

但我得到

我尝试了几种替代方法,setActionsetData到目前为止都没有

0 投票
1 回答
836 浏览

python - 为什么除了jnius我不能导入pyjnius的任何东西?

当我使用 python 解释器时,我可以很好地导入它。但是如果我写一个脚本,由于某种原因import jnius工作正常,但是当我写from jnius import autoclass或者from jnius import JavaClass我得到一个ImportError: Cannot import 'autoclass' from 'jnius'.

我什至尝试过写作

但我明白了AttributeError: 'jnius' has no attribute 'autoclass'

编辑: 当我们讨论这个autoclass话题时,当我写作时

我明白了

0 投票
0 回答
288 浏览

windows - Conda 没有为 pyjnius 的 JDK 设置正确的路径

我已经用 conda 安装了pyjnius。但是,当我尝试导入 pyjnius 它失败了

与 pyjnius conda 一起安装 openjdk。接下来,pyjniusjvm.dll在其中一个PATH目录中查找。DLL 可以在

C:\Users\OEM\Miniconda3\pkgs\openjdk-11.0.1-1017\Library\bin\server

但 conda 不包含在PATH. 它添加了另一个文件夹PATH

C:\Users\OEM\Miniconda3\envs\example2-env\Library\jre\bin\server

虽然缺少此目录:尚未安装 JRE,仅安装了 JDK。显然,我可以在我的 . 文件中包含第一个目录PATH,但是,这将绕过 conda 虚拟环境的概念。我怎样才能优雅地解决这个问题?

这是environment.yml重现问题:

接下来,我创建并激活如下:

0 投票
0 回答
337 浏览

python - 如何使用 pyjnius 通过 Android BluetoothSocket 发送数据?

我正在尝试通过两个 Android 平板电脑之间的 BluetoothSocket 发送数据。我使用“ createRfcommSocketToServiceRecord ”创建了一个,并且在两个设备上“ isConnected() ”返回 True,“ getRemoteDevice().getName() ”根据需要返回另一个设备。但是,当我尝试在它们之间发送和接收数据时,两端都没有收到任何内容。在 BluetoothAdapter (link)的 Android 文档中,它指出:

使用 BluetoothDevice#createRfcommSocketToServiceRecord 从另一个使用相同 UUID 的设备连接到此套接字。

我已经尝试在两台设备上运行底部的代码。我也试过运行:

...在一台设备上,另一台设备底部的代码,这导致即使在另一台设备上尝试连接到它之后,ServerSocket 也无限期地挂在 accept() 上。我认为我在做一些根本错误的事情,但我已经搜索了一段时间的 Android 开发人员文档,但我无法弄清楚我的误解是什么。任何启蒙都将不胜感激。

我正在使用 Kivy 创建一个用于发送一些测试数据的文本字段,但我在这里对其进行了简化。

0 投票
1 回答
1399 浏览

java - 如何使用蓝牙 getInputStream 和 getOutputStream 的 pyjnius 读写参数?

我一直在摸索使用python for android jnius库从蓝牙RS232转换器获取数据。我原以为它会像 PySerial 库一样简单,但由于我还是 java 新手,所以实现是完全不同的。
我很容易地创建了蓝牙连接,但是一旦我尝试读取或写入数据,我就会得到一个jnius.jnius.JavaException可用No methods matching your arguments,的方法read是: '()I', '([B)I', '([BII)I'和 for writeare '(I)V', '([B)V', '([BII)V'。我尝试在开发人员 android 文档以及 DuckDuckGoing 中找到它,但不清楚。我也使用该方法
尝试了BufferedReader示例(HerereadLine() ) ,但我不断收到错误: JavaException: JVM exception occurred: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null object reference.

有人可以将我指向文档以了解上述读写参数吗?
另外,请帮助我理解为什么read, readLine() and write对象不返回任何数据?

我调用的 Java 库:

连接代码(从 Github 和上面的链接获得):

读写代码(来源:与上面的链接相同):

更新:

所以我终于使用readLine()不返回错误并返回字符串的方法获得了输入。我清理了一下,但代码差别不大。主要的事情是我检查了是否在我的事件循环device != Noneif rfsocket.connected:创建 getInputStream 之前,以免重新创建套接字对象。必须进行更多测试才能看到主要问题在哪里。仍然不知道和的论点是read什么write方法的论点是什么。该readLine()方法间歇地或根本不返回字符串,我的事件循环似乎不适用于该readLine()方法。

更新更新:

事件循环再次工作。我的错,我没有正确调用触发对象。这readLine()方法有一个奇怪的模式,在第一次读取时它给了我JavaException: JVM exception occurred: Attempt to invoke virtual method 'int java.io.InputStream.available()' on a null object reference,随后的读取给了我预期的字符串片段或空字符串。当我使用 PySerial 通过硬线接收数据时,我返回了类似的字符串位和片段。解决方案是重置输入缓冲区。上面的java库中是否有类似的东西?

终于破解了异常:

是的,这很令人兴奋!几个小时后,我注意到我无法再获得输入,只有例外。我尝试了BufferedInputStream图书馆并得到了相同的结果,没有更多的间歇阅读。为什么?所以我重新 Apk'd 昨晚的main文件并再次读取间歇输入。
原因是,如果我在rfsocket蓝牙对象未连接到指定端口时创建 java 对象,则Null对象在不同的​​端口上初始化,由于某种原因,ifself.recv_stream is not Noneself.recv_stream != None. 可能是因为它们不是Null对象,而是Null我指定的后续端口 1 套接字连接。我的例子中
的工作,需要三个参数readline()read()bytes(), int offset, int len(bytes()jnius.jnius.exception从象形文字的信息中不清楚。还在摸索write方法。您可以在该方法中指定的一件事是BufferedReader您要读取的块大小的第二个参数或在 java speakdefaultCharBufferSize中。

0 投票
0 回答
413 浏览

python - 带有 Kivy 和 Buildozer 的 Android 应用程序无法正确读取 WhatsApp 聊天

我正在尝试使用 Kivy 和 buildozer 制作一个简单的 android 应用程序,我在其中对 WhatsApp 导出的聊天做出反应。现在我只尝试将应用程序中的最后三条消息打印到屏幕上。问题是表情符号没有正确读取。例如,我有一个聊天,其中最后三条消息是:

14-11-19 09:17 - MyName:这是一个测试消息

14-11-19 09:17 - 我的名字:带有表情符号

19 年 14 月 11 日 09:17 - 我的名字:

表情符号应该是 U+0001F602

表情符号应该是 U+0001F44C U+0001F3FB

我在android上的输出: ○

如果我将聊天导出为 .txt,然后在桌面上使用相同的程序,我的输出是正确的: 在此处输入图像描述.

这是我的代码:

意图过滤器.xml

主文件.kv

主文件

buildozer.spec 文件需要

问题出在 get_android_intent 或 get_chatdata 函数中。我现在对 Java 几乎一无所知,因此欢迎对这些函数发表任何评论。

如果无法解决,我也很高兴能解释这种行为。

0 投票
1 回答
420 浏览

java - Pyjnius 自定义 java 方法返回“JavaException:无法找到无方法”在公共静态之后工作

所以我需要从 Android 的 InputStream 中读取一个 ByteArray。因此,出于与链接中所述相同的原因,我在使用 pyjnius 的 kivy 应用程序中在 java 中 使用了此自定义方法。

我将 ReadInput.java 文件放在这个目录中:
~/Build_Environ/.buildozer/android/platform/build/dists/JniusPrintBluetoothAppie/src/main/java/org/kivy/android

我用 pyjnius 初始化了 java 类:

的java代码:


我使用以下代码从 python 中的缓冲区读取:

但由于某种原因,上面的代码不断给我以下错误:
JavaException: Unable to find a None Method

经过很多天的努力,我终于通过简单地将方法声明为: public static 新的java方法如下所示,我以与上面相同的方式调用它:



我想知道的是为什么“静态”这个词会让java方法突然起作用?

0 投票
2 回答
2869 浏览

java - 如何使用 python/kivy 在 Android 上获取音频(麦克风)输入

来自访客的编辑:目前围绕这种情况的共识似乎是 Kivy 目前不支持麦克风,我们请求人们帮助移植“音频流”附加组件,以便它可以再次工作。非常感谢任何有助于此的微小工作。更多信息如下。

我尝试让麦克风在 android 上工作,我主要使用 kivy 和 buildozer 我用音频流输出音频,但是该模块太过时了,如果使用输入“录制” GITHub 问题它将不再工作。我无法让录制工作在 pc 上,因为它在我使用记录功能时说“不支持”,在文档上它只提到移动设备,所以没关系。无论如何,它都可以在那些平台上用 pyaudio 替换。

我试图搜索我可以使用的其他选项,所以我遇到了 pyjnius 和 MediaRecorder,我对 java 非常陌生,(并且试图学习 python atm,所以那里也是新手)所以我无法让它工作。问题在于,我需要将所有麦克风数据转换为字节,这对 pyaudio 来说很容易,而且它可以工作。为什么我在这里,它是 pyaudio 不起作用的 android(至少我还没有尝试将库编译到 android,我知道这可能是可能的但很多工作..)

这是我必须尝试让它工作的代码:

我知道 FileDescriptor 有一些东西,有一些例子,但它们都有字符串上的空格,所以我不知道如何将它们转换为 python .. 我想要的只是 setOutputFile -> gaindata

如果有另一个选项会很好,我需要来自麦克风的 bytesIO 数据(首选 8000、单声道、不带标题或 GSM6.10 的原始 wav),我将使用声音文件(是的,我将 libsndfile.so 编译为 arm)将其转换为 gsm6 .10 并将其放入套接字,它是一个 VoIP 应用程序。

0 投票
0 回答
119 浏览

python - 没有与您的参数匹配的方法,可用 [] python pyjnius

我想创建应用程序。在这个应用程序中,用户可以像在“WhatsApp”中一样从画廊上传文件。我有代码:

但是当我启动应用程序时,我得到了错误:

我该如何解决。我希望你能帮助我...

0 投票
1 回答
312 浏览

java - 使用 Pyjnius 覆盖 Python 中的 Java 方法

我想使用 Pyjnius 创建一个 Python 类,它扩展了一个 Java 类并覆盖了它的一些方法。

具体来说,这些 Java 类:

当我运行时,我看到:

如何B使用 Pyjnius 在 Python 中重新实现?

这是我的尝试:

当我运行 Python 版本时,我看到:

它没有正确覆盖test_method。我该如何解决?