通过 pyjnius 在 kivy 中使用 MediaStore

Posted

技术标签:

【中文标题】通过 pyjnius 在 kivy 中使用 MediaStore【英文标题】:Using MediaStore in kivy with pyjnius 【发布时间】:2019-06-23 20:05:21 【问题描述】:

我正在尝试使用 kivy 开发一个 android 媒体播放器,我目前正坚持在 android 设备上获取所有音频文件数据并在回收视图中填充数据。我做了一些研究,发现我可以在 java MediaStore 类的帮助下实现这一点,但我不知道该怎么做。

我曾尝试查看 pyjnius 文档,但它对于初学者来说不是很详细,因此任何关于我如何实现这一点的说明方面的帮助将不胜感激。

【问题讨论】:

【参考方案1】:

没有使用过MediaStore,但这是我使用pyjnius 安装apk 文件的方法:

            from jnius import cast
            from jnius import autoclass
            # the download is the app, install it using an Android Intent

            PythonActivity = autoclass('org.kivy.android.PythonActivity') #request the Kivy activity instance
            Intent = autoclass('android.content.Intent') # get the Android Intent class
            Uri = autoclass('android.net.Uri')
            File = autoclass('java.io.File')

            intent = Intent() # create a new Android Intent
            intent.setDataAndType(Uri.fromFile(File(str(self.localUpdateFile))), "application/vnd.android.package-archive")
            intent.setAction(Intent.ACTION_VIEW) #set the action (use ACTION_VIEW for install)
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

            currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
            currentActivity.startActivity(intent) # show the intent in the activity

我希望从MediaStore 开始会是类似的,但不确定您将如何从中获取信息。

【讨论】:

【参考方案2】:

适用于我,在 Android

from jnius import autoclass

def get_songs(self):
    PythonActivity = autoclass('org.kivy.android.PythonActivity')
    Cursor = autoclass('android.database.Cursor')
    Uri = autoclass('android.net.Uri')

    contentResolver = PythonActivity.mActivity
    uri = Uri.parse("content://media/external/audio/media/")
    # uri = Uri.parse("content://media/internal/audio/media/")

    cursor = contentResolver.getContentResolver().query(uri, None, None, None, None)

    if cursor is not None and cursor.moveToFirst():
        while cursor.moveToNext():
            title = cursor.getString(cursor.getColumnIndex('MediaStore.Audio.Media.TITLE'))  # retrieve songs title
            # path = cursor.getString(cursor.getColumnIndex('MediaStore.Audio.Media._data'))  # retrieve songs path

            print(title)

    cursor.close()

【讨论】:

以上是关于通过 pyjnius 在 kivy 中使用 MediaStore的主要内容,如果未能解决你的问题,请参考以下文章

从 kivy 导入 pyjnius

如何在 python/kivy/pyjnius 检测 Android 中的屏幕分辨率?

如何使用 kivy、pyjnius 为 android 制作 GPS 应用程序?

Pyjnius,用于使用 Kivy 登录按钮的 Facebook/Google SDK

如何编译 java 文件并使用 pyjnius 和 kivy 导入它们

如何执行 ./distribute.sh -m 'pyjnius kivy' 这个命令