android-MediaPlayer的setDataSource出错

问题描述

MediaPlayer的setDataSource出错

我想用service播放音乐
直接上代码:
private static final MediaPlayer mp = new MediaPlayer();
private String songId;
private int op;

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    // mp = new MediaPlayer();
    mp.setOnCompletionListener(this);
    System.out.println("start mediaplayer");
}

public void onDestroy() {
    System.out.println("stop mediaplayer");
    if (mp != null) {
        mp.stop();
        mp.release();
    }
}

@Override
public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    MainActivity.next();
}

@Override
@Deprecated
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub

}

public void option() {
    switch (op) {
    case 1:
        mp.stop();
        break;
    case 2:
        playMusic();
        break;
    default:
        Toast.makeText(this, "无法找到操作码", Toast.LENGTH_SHORT).show();
        break;
    }
}

public void playMusic() {

    System.out.println("start playing music");

    if (mp.isPlaying()) {
        mp.stop();
    }

    Uri uri = Uri.withAppendedPath(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, songId);

    System.out.println("uri is wrong");

    try {
        mp.reset();
        mp.setDataSource(MusicService.this, uri);
        // mp.setLooping(true);
        mp.prepare();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    mp.start();
}

public void OnMp3Change(String songId, int op) {
// TODO Auto-generated method stub
System.out.println("MusicService:" + songId);
this.songId = songId;
this.op = op;
option();
}
最后在playMusic中的mp.setDataSource(MusicService.this, uri)这里报错。
10-14 07:51:23.515: W/System.err(10908): java.lang.NullPointerException
10-14 07:51:23.519: W/System.err(10908): at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:99)
10-14 07:51:23.522: W/System.err(10908): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:876)
10-14 07:51:23.522: W/System.err(10908): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:854)
10-14 07:51:23.522: W/System.err(10908): at com.example.scanmusic.MusicService.playMusic(MusicService.java:85)
10-14 07:51:23.522: W/System.err(10908): at com.example.scanmusic.MusicService.option(MusicService.java:62)
10-14 07:51:23.525: W/System.err(10908): at com.example.scanmusic.MusicService.OnMp3Change(MusicService.java:113)
10-14 07:51:23.525: W/System.err(10908): at com.example.scanmusic.MainActivity.onListItemClick(MainActivity.java:138)
10-14 07:51:23.525: W/System.err(10908): at android.app.ListActivity$2.onItemClick(ListActivity.java:319)
10-14 07:51:23.525: W/System.err(10908): at android.widget.AdapterView.performItemClick(AdapterView.java:301)
10-14 07:51:23.525: W/System.err(10908): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
10-14 07:51:23.529: W/System.err(10908): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
10-14 07:51:23.529: W/System.err(10908): at android.widget.AbsListView$1.run(AbsListView.java:3430)
10-14 07:51:23.529: W/System.err(10908): at android.os.Handler.handleCallback(Handler.java:725)
10-14 07:51:23.529: W/System.err(10908): at android.os.Handler.dispatchMessage(Handler.java:92)
10-14 07:51:23.529: W/System.err(10908): at android.os.Looper.loop(Looper.java:137)
10-14 07:51:23.529: W/System.err(10908): at android.app.ActivityThread.main(ActivityThread.java:5106)
10-14 07:51:23.532: W/System.err(10908): at java.lang.reflect.Method.invokeNative(Native Method)
10-14 07:51:23.532: W/System.err(10908): at java.lang.reflect.Method.invoke(Method.java:511)
10-14 07:51:23.532: W/System.err(10908): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
10-14 07:51:23.532: W/System.err(10908): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:588)
10-14 07:51:23.532: W/System.err(10908): at dalvik.system.NativeStart.main(Native Method)

解决方案

在设置dataSource前添加
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(path);

解决方案二:

楼主,你报错那行下面打印的是啥?打印Uri看看路径是否正确。
我记得这个方法获得的路径是SD Card里的,你SD Card里放文件了么?

时间: 2024-08-30 00:45:54

android-MediaPlayer的setDataSource出错的相关文章

Android MediaPlayer 音乐播放

主要使用 android.media.MediaPlayer; android.widget.SeekBar;    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/Layout01" android:

视频-android mediaPlayer播放了1.4G的MP4 抛出 传输量过大异常

问题描述 android mediaPlayer播放了1.4G的MP4 抛出 传输量过大异常 package com.example.zyc.surfaceview; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os

Android MediaPlayer无法播放

问题描述 Android MediaPlayer无法播放 package com.example.cjlhappiness.a131; import android.media.MediaPlayer; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.B

我的Android进阶之旅------&amp;gt;Android MediaPlayer播放mp3的实例--简易mp3播放器

大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的. 首先来看看MediaPlayer的生命周期: 从MediaPlayer的生命周期图或者说是状态转移图上来看: 当一个MediaPlayer对象别创建或者调用reset()方法之后,它处于空闲状态,在调用release()方法

深入Android MediaPlayer的使用方法详解_Android

1)如何获得MediaPlayer实例:可以使用直接new的方式:MediaPlayer mp = new MediaPlayer();也可以使用create的方式,如:MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了 2) 如何设置要播放的文件:MediaPlayer要播放的文件主要包括3个来源:a. 用户在应用中事先自带的resource资源例如:MediaPlayer.create(t

Android MediaPlayer实现音乐播放器实例代码

Android MediaPlayer实现音乐播放器 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height=&qu

android开发-android自定义标题栏总是出错

问题描述 android自定义标题栏总是出错 采用网上说的自定义标题栏的方法: requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar); 只要指定了Window.FEATURE_CUSTOM_TITLE则会在setContentView出错,

编码-android studio中AndroidManifest出错

问题描述 android studio中AndroidManifest出错 Manifest.xml源码如下: <?xml version="1.0" encoding="utf-8"?> package="com.example.administrator.myapplication" > <uses-permission android:name="android.permission.INTERNET&qu

Android server+BroadcastReceiver倒计时出错

问题描述 Android server+BroadcastReceiver倒计时出错 我用server+BroadcastReceiver做了个计时器,现在出现个问题,每次重新进入页面时候倒计时都会累加来减,就是原来是1s来减,第二次进入就是2s来.在 finish中写了取消广播的方法.求组大神 @Override public void finish() { super.finish(); if (isreceiver==true) { Intent service = new Intent(