0

我正在努力在 MEDIA PLAYER 中务实地播放铃声。在此之前,我已将所有 RINGTONES 绝对路径存储在 SQLite DB中。当我必须播放铃声时,我需要从 DB 中获取路径并将其转换为 URI 并播放铃声,但我在下面代码的第 2 行中得到 NULL POINTER EXCEPTION。

    Uri u = Uri.parse(soundpath);
    player = MediaPlayer.create(this, u);
    Context con  =getApplicationContext();
    player.setWakeMode(con,PowerManager.PARTIAL_WAKE_LOCK);
    player.setVolume(1f, 1f);
    player.start();

在调试时,我将变量soundpath的值作为/content:/media/internal/audio/media/23

请给我建议。

已编辑:用于将所有铃声存储在 HASHMAP 中的代码

 Ringtone ringtone = ringtoneMgr.getRingtone(currentPosition);
                System.out.println(ringtone.getTitle(this));
                File uripath=new File(ringtoneMgr.getRingtoneUri(currentPosition).toString());
   Toast.LENGTH_LONG).show();
                ringtonemap.put(ringtone.getTitle(this), uripath.getAbsolutePath());
                arraylist.add(ringtone.getTitle(this));
4

2 回答 2

1

那个uri看起来不正确。它应该是content://media/internal/audio/media/23-您是否正确存储它?

确保正确存储它们。如果无法更改它们的存储方式,您始终可以在传递给MediaPlayer

soundpath = soundpath.replaceAll("/content:/", "content://");
于 2013-06-28T09:49:44.573 回答
0

我正在将 URI 路径从字符串转换为文件,这不是必需的。错误出现在路径生成时间。新代码贴在下面:

Ringtone ringtone = ringtoneMgr.getRingtone(currentPosition);
            System.out.println(ringtone.getTitle(this));
        String  uri =ringtoneMgr.getRingtoneUri(currentPosition).toString();
Toast.LENGTH_LONG).show();
            ringtonemap.put(ringtone.getTitle(this),uri);
            arraylist.add(ringtone.getTitle(this));

在我必须播放铃声的时候:

player = MediaPlayer.create(this, Uri.parse(soundpath));
于 2013-06-28T10:20:56.597 回答