标签: android-music-player

Android的READ_EXTERNAL_STORAGE权限

我正在尝试访问用户设备上的媒体文件(音乐)来播放它们; 一个简单的"你好世界" - 音乐播放器应用程序.

我已经按照一些教程,他们基本上给出了相同的代码.但它不起作用; 它一直在崩溃并告诉我:

error.....
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=27696, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
....
Run Code Online (Sandbox Code Playgroud)

现在,这是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="slimsimapps.troff" >

    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

这是我的Java方法:

public void initialize() {
    ContentResolver contentResolver = getContentResolver();
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor cursor = contentResolver.query(uri, null, null, null, null); …
Run Code Online (Sandbox Code Playgroud)

java android audio-player android-music-player android-external-storage

73
推荐指数
5
解决办法
12万
查看次数

Android - ICS 4.0中的MediaPlayer缓冲区大小

我正在使用套接字作为MediaPlayer的代理,因此我可以在将mp3音频写入套接字之前下载并解密它.这类似于NPR新闻应用程序中显示的示例,但是我将其用于所有Android版本2.1 - 4 atm.

NPR StreamProxy代码 - http://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java

我的问题是2.1-2.3的播放速度很快,但在Android 4.0 ICS中,MediaPlayer在触发onPrepared监听器之前会缓冲太多数据.

在onPrepared()之前写入Socket OutputStream的示例数据量:

在SGS2上有2.3.4 - onPrepared()在~133920字节之后

在Nexus S上使用4.0.4 - onPrepared()在~961930字节之后

这也发生在Galaxy Nexus上.

奇怪的是,4.0模拟器不会像4.0设备一样缓冲数据.有人在ICS上遇到与MediaPlayer类似的问题吗?

编辑

以下是代理如何写入套接字.在这个例子中,它来自从文件加载的CipherInputStream,但是当它从HttpResponse加载时也是如此.

final Socket client = (setup above)

// encrypted file input stream
final CipherInputStream inputStream = getInputStream(file);

// setup the socket output stream
final OutputStream output =  client.getOutputStream();

// Writing the header
final String httpHeader = buildHttpHeader(file.length());
final byte[] buffer = httpHeader.getBytes("UTF-8");
output.write(buffer, 0, buffer.length);

int writtenBytes = 0;
int readBytes;
final byte[] buff = new …
Run Code Online (Sandbox Code Playgroud)

audio streaming android audio-player android-music-player

42
推荐指数
1
解决办法
1万
查看次数

如何在android上以编程方式将音量调到最大?

我正在为Android编写一个应用程序来调高音量并播放45秒的歌曲然后停止.这很好,但是我只能将音量提高到50%,有没有办法使用setVolume()将音量调高到100%?

这是我的代码:

final MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);

//plays eye of the tiger for 45 seconds
if (messages.contains("MUSIC ONLY")){

    //turn up the volume
    mp.setVolume(20, 20);
    mp.start();

    //play ring tone for 45 seconds
    new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            mp.stop();
        }
    }, 45000);
}
Run Code Online (Sandbox Code Playgroud)

android volume android-music-player

32
推荐指数
1
解决办法
5万
查看次数

Android背景音乐服务

我正在开发一个Android的娱乐应用程序.我想播放背景音乐,我想为此服务.应用程序有3个活动,必须在所有活动中播放音乐.此外,当活动暂停时,音乐必须暂停并在销毁时停止.谁能告诉我怎么做?任何链接或示例?

谢谢.

android background-music android-service android-music-player

31
推荐指数
4
解决办法
10万
查看次数

如何在通知栏上放置媒体控制器按钮?

我正在创建一个音乐播放器应用程序 我想在我的应用程序在后台运行时在通知栏上显示媒体控制器.它看起来像谷歌播放器.

在此输入图像描述

这该怎么做?

android android-music-player mediacontroller

27
推荐指数
2
解决办法
3万
查看次数

媒体播放器控制在通知中

我已经编写了完整的音乐播放器来播放来自网络的音乐,但我不知道如何将媒体播放器控件置于通知中以及何时屏幕是锁定.

我按照本教程 在通知栏中显示控件,但仍未获得如何在我的程序中使用相同的功能,我已导入所需的类,如:NotificationService.javaConstants.java.

这是我在通知栏中得到的:

[通知]

我很迷惑.为什么我没有得到我正在播放的歌曲的标题,为什么暂停,上一个和下一个按钮不起作用等...

NotificationService.java:

public class NotificationService extends Service {

    Notification status;
    private final String LOG_TAG = "NotificationService";

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) {
            showNotification();
            Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();  
        } else if (intent.getAction().equals(Constants.ACTION.PREV_ACTION)) {
            Toast.makeText(this, "Clicked Previous", Toast.LENGTH_SHORT).show();
            Log.i(LOG_TAG, "Clicked Previous");
        } else if (intent.getAction().equals(Constants.ACTION.PLAY_ACTION)) {
            Toast.makeText(this, "Clicked …
Run Code Online (Sandbox Code Playgroud)

notifications android lockscreen android-music-player

18
推荐指数
1
解决办法
2万
查看次数

无法在Google音乐播放器中播放歌曲

有没有办法从我的应用程序开始在Google音乐播放器应用程序中播放歌曲?我正在尝试关注代码,但谷歌音乐播放器只打开搜索结果并且实际上不播放该歌曲.

    Intent intent = new Intent();
    intent.setAction(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH);
    intent.putExtra(SearchManager.QUERY, "It's my life");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.setPackage("com.google.android.music");
    activity.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH的文档说明如下:意图执行搜索音乐媒体并尽可能自动播放结果中的内容.

所以,根据文档,它应该能够播放这首歌.但是,它只会打开搜索结果而不会播放.我在这里缺少什么想法?

谢谢你尽你所能的帮助.

android audio-player android-music-player

17
推荐指数
1
解决办法
796
查看次数

如何阻止其他应用程序播放当前活动中的音乐?

在我的应用程序中,我正在尝试创建一个按钮,单击此按钮可停止播放音乐的所有其他应用程序.我想要的是类似的,如果我通过一个音乐播放器播放音乐,如果我尝试通过第二个音乐播放器播放其他音乐,则当前的音乐播放器停止,然后第二个音乐播放器启动.我们如何阻止其他应用播放当前活动/应用中的音乐?

android android-music-player

17
推荐指数
1
解决办法
1万
查看次数

Android SeekBar setProgress导致我的MediaPlayer跳过

我正在尝试使用SeekBar来显示MediaPlayer类播放的曲目的长度,并在轨道中启用搜索.

在赛道内寻找效果很好.但是,在播放曲目时使用setProgress更新进度值似乎会导致轻微跳过.

在onCreate方法中,我创建了一个带有循环的Thread,它更新了SeekBar当前轨道的进度值.更改曲目时,此循环将重置.

private void createProgressThread() {

    _progressUpdater = new Runnable() {
        @Override
        public void run() {
            //Exitting is set on destroy
            while(!_exitting) {
                _resetProgress = false;
                if(_player.isPlaying()) {
                    try
                    {
                        int current = 0;
                        int total = _player.getDuration();
                        progressBar.setMax(total);
                        progressBar.setIndeterminate(false);

                        while(_player!=null && current<total && !_resetProgress){
                            try {
                                Thread.sleep(1000); //Update once per second
                                current = _player.getCurrentPosition();
                                 //Removing this line, the track plays normally.
                                progressBar.setProgress(current); 
                            } catch (InterruptedException e) {

                            } catch (Exception e){

                            }            
                        }
                    }
                    catch(Exception e)
                    {
                        //Don't …
Run Code Online (Sandbox Code Playgroud)

multithreading android audio-player android-music-player

15
推荐指数
1
解决办法
8141
查看次数

如何访问MediaMetadataRetriever.setDataSource(...)状态代码?

我收到以下错误java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA,我想知道这个状态是什么.我正在使用该功能MediaMetaDataRetriever.setDataSource(String filePath)

android android-music-player android-mediaplayer

13
推荐指数
3
解决办法
6753
查看次数