Audiodateien auf Smartwatch werden nicht gefunden

  • 2 Antworten
  • Letztes Antwortdatum
Status
Dieses Thema wurde gelöst! Zur Lösung springen…
Schneevoli

Schneevoli

Neues Mitglied
0
Hallo,
ich entwickle eine Art verbesserten Musik-Player für Wear OS und hänge nun länger an einem Problem fest. Ich möchte (als ersten Schritt), dass der User aus den lokal gespeicherten Audio-Dateien auf der Uhr eine auswählen und abspielen kann.

Ich benutze Android Studio Koala 2024.1.1 und Android SDK 34 und programmiere in Kotlin.

Hier ist meine Funktion zum Finden der Audiodateien:

Code:
fun findSongs(): SortedMap<String, String> {
        val selection = StringBuilder("is_music != 0 AND title != ''")
        val songs = HashMap<String, String>()

        // Display audios in alphabetical order based on their display name.
        val sortOrder = "${MediaStore.Audio.Media.DISPLAY_NAME} ASC"
        val cursor: Cursor? = contentResolver.query(
            INTERNAL_CONTENT_URI,
            null,
            null,
            null,
            null
        )

        if (cursor != null && cursor.moveToFirst()) {
            do {
                val id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID))
                val title: String =
                    cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME))
                val duration: Int =
                    cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION))
                val size = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE))
                val artist =
                    cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST))

                val uri = ContentUris.withAppendedId(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)))

                val path = getPath(this, uri)
                //if (title.endsWith(".mp3")) {
                songs[title] = path.toString()
                //}


            } while (cursor.moveToNext())
        }

        val songsSorted = songs.toSortedMap()

        cursor?.close()
        return songsSorted
    }

Ich habe außerdem diese Permissions im Manifest:

XML:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION" />

Wenn ich die App builde und auf meine Smartwatch lade (Galaxy Watch 4 mit WearOS 5.0) und in den Einstellungen die Zugriffe erlaube, findet der Code nur eine Reihe von Systemsounds (sowas wie Alarm-Sounds, Klingeltöne usw), aber NICHT meine selber draufgeladenen mp3-Dateien. Ich lade sie immer über die Wearable-App von meinem Handy drauf, und soweit ich das verstehe, sind sie dann lokal auf der Uhr. Denn ich kann sie auch ohne Internetverbindung und ohne Verbindung zum Handy abspielen.

Ich habe ausprobiert "INTERNAL_CONTENT_URI" zu "EXTERNAL_CONTENT_URI" zu ändern, aber das ändert nichts. Außerdem habe ich in Android Studio in dem simulierten Dateiverzeichnis eine mp3 unter storage und eine unter sd-card gelegt, aber beide werden nicht von diesem Code gefunden, weder mit Internal noch mit External.

Kann mir jemand weiterhelfen? Ich wäre sehr dankbar.
 
Empfohlene Antwort(en)
Alle Antworten (2)
@jogimuc Vielen Dank für die Hilfe, es funktioniert jetzt! Ich hab die contentUri vom contentResolver so gesetzt wie du geschrieben hast und alles wieder zu EXTERNAL_CONTENT_URI geändert.

Code:
fun findSongs(): SortedMap<String, String> {
        val selection = StringBuilder("is_music != 0 AND title != ''")
        val songs = HashMap<String, String>()

        val contenturi = MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
        // Display audios in alphabetical order based on their display name.
        val sortOrder = "${MediaStore.Audio.Media.DISPLAY_NAME} ASC"
        val cursor: Cursor? = contentResolver.query(
            contenturi,
            null,
            null,
            null,
            null
        )

        if (cursor != null && cursor.moveToFirst()) {
            do {
                val id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID))
                val title: String =
                    cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME))
                val duration: Int =
                    cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION))
                val size = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE))
                val artist =
                    cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST))

                val uri = ContentUris.withAppendedId(EXTERNAL_CONTENT_URI, cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)))


                val path = getPath(this, uri)
                //if (title.endsWith(".mp3")) {
                songs[title] = path.toString()
                //}


            } while (cursor.moveToNext())
        }


Danke danke!
 
Status
Dieses Thema wurde gelöst! Zur Lösung springen…

Ähnliche Themen

DerOhneNick
Antworten
3
Aufrufe
1.661
DerOhneNick
DerOhneNick
R
Antworten
0
Aufrufe
1.511
Raketenmensch
R
H
  • Horsthansen2210
Antworten
0
Aufrufe
1.203
Horsthansen2210
H
Zurück
Oben Unten