当前位置:编程学习 > wap >>

Mediaplayer.OnErrorListener

首先是主函数:
package com.example.mymediaplayer4;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
private Button last,next;
private ImageButton play,pause,stop;
private TextView musicName;
private ListView musicList;
private MainReceiver mainreceiver;
private ArrayList<String> musicname=new ArrayList<String>();
public static final String main="MAIN_RECEIVER";
public static final String musicservice="MUSIC_RECEIVER";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        contentView();
        
        IntentFilter intentfilter=new IntentFilter();
        intentfilter.addAction(main);
        mainreceiver=new MainReceiver();
        registerReceiver(mainreceiver, intentfilter);
        
        Intent intent=new Intent();
        intent.setClass(this, musicService.class);
        startService(intent);
        
        last.setOnClickListener(new listener());
        next.setOnClickListener(new listener());
        play.setOnClickListener(new listener());
        pause.setOnClickListener(new listener());
        stop.setOnClickListener(new listener());
        
        musicList.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.setAction(musicservice);
intent.putExtra("key", (int)arg3);
intent.putExtra(musicService.Mark, 7);
sendBroadcast(intent);

System.out.println(arg3);
}
});
    }
    public class listener implements android.view.View.OnClickListener{
     Intent intent=new Intent(musicservice);
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.last:
intent.putExtra(musicService.Mark, 2);
break;
case R.id.play:
intent.putExtra(musicService.Mark, 3);
break;
case R.id.pause:
intent.putExtra(musicService.Mark, 4);
break;
case R.id.stop:
intent.putExtra(musicService.Mark, 5);
break;
case R.id.next:
intent.putExtra(musicService.Mark, 6);
break;

default:

break;
}
sendBroadcast(intent);
}
    
    }
private void contentView(){
last=(Button)findViewById(R.id.last);
next=(Button)findViewById(R.id.next);
last.setText(" << ");
next.setText(" >> ");
play=(ImageButton)findViewById(R.id.play);
pause=(ImageButton)findViewById(R.id.pause);
stop=(ImageButton)findViewById(R.id.stop);
musicName=(TextView)findViewById(R.id.musicname);
musicList=(ListView)findViewById(R.id.list);
}
private class MainReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
int Mark=arg1.getIntExtra(musicService.Mark, 0);
switch (Mark) {
case 1:
Bundle bu=arg1.getExtras();
musicname=bu.getStringArrayList("musicname");
showlist(musicname);
break;
case 2:
play.setEnabled(false);
pause.setEnabled(true);
stop.setEnabled(true);
musicName.setText(arg1.getStringExtra("name"));
break;
case 3:
play.setEnabled(false);
pause.setEnabled(true);
stop.setEnabled(true);
musicName.setText(arg1.getStringExtra("name"));
break;

case 4:
play.setEnabled(true);
pause.setEnabled(false);
stop.setEnabled(true);
break;
case 5:
play.setEnabled(true);
pause.setEnabled(false);
stop.setEnabled(false);
break;
case 6:
play.setEnabled(false);
pause.setEnabled(true);
stop.setEnabled(true);
musicName.setText(arg1.getStringExtra("name"));
break;
case 7:

break;

default:
break;
}

}
}
public void showlist(ArrayList<String> musicname){
ArrayList<String> name=new ArrayList<String>();
for(int i=0;i<musicname.size();i++){
name.add(musicname.get(i).length()>20 ? musicname.get(i).substring(0, 20)+"..." : musicname.get(i));
}
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, name);
musicList.setAdapter(adapter);
}
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BACK){
System.out.println("onkeyDown");
unregisterReceiver(mainreceiver);
this.finish();
}
return super.onKeyDown(keyCode, event);
}
}


文件过滤器:
package com.example.mymediaplayer4;

import java.io.File;
import java.io.FilenameFilter;

public class myfile implements FilenameFilter {

@Override
public boolean accept(File dir, String filename) {
// TODO Auto-generated method stub
String name=filename.toLowerCase();
return  (name.endsWith(".mp3")||name.endsWith(".wav"));
}

}


--------------------编程问答-------------------- 然后是musicservice:
package com.example.mymediaplayer4;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.app.AlertDialog.Builder;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;

public class musicService extends Service {
private static final String home=Environment.getExternalStorageDirectory().getAbsolutePath().toString().trim();
private String musichome=home+File.separator+"music";
private ArrayList<String> musicpath,musicname;
private MusicReceiver musicreceiver;
private MediaPlayer mplayer;
private Intent intent;
private int Index=0;
public static final String Mark="mark";
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate(){
super.onCreate();
System.out.println("onCreate!");
mplayer=new MediaPlayer();
mplayer.setOnCompletionListener(new OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
next();
intent.setAction(MainActivity.main);
intent.putExtra(Mark, 6);
intent.putExtra("name", musicname.get(Index));
sendBroadcast(intent);
}
});
mplayer.setOnErrorListener(new OnErrorListener() {

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
System.out.println("Error!");
next();
intent.setAction(MainActivity.main);
intent.putExtra(Mark, 6);
intent.putExtra("name", musicname.get(Index));
sendBroadcast(intent);
return true;
}
});

musicpath=new ArrayList<String>();
musicname=new ArrayList<String>();

IntentFilter intentfilter=new IntentFilter();
intentfilter.addAction(MainActivity.musicservice);
musicreceiver=new MusicReceiver();
registerReceiver(musicreceiver, intentfilter);

File file=new File(musichome);
File[] files=file.listFiles(new myfile());
if(files.length>0){
for(File f:file.listFiles(new myfile())){
musicpath.add(f.getPath());
musicname.add(f.getName());
System.out.println(f.getPath());
System.out.println(f.getName());
}
}


}
@Override
public void onStart(Intent intent,int startId){
super.onStart(intent, startId);
System.out.println("onStart!");
System.out.println(musicname.get(Index));
intent=new Intent();
if(mplayer.isPlaying()){
intent.setAction(MainActivity.main);
intent.putExtra(Mark, 3);
intent.putExtra("name", musicname.get(Index));
sendBroadcast(intent);
}

intent.setAction(MainActivity.main);
Bundle bu=new Bundle();
bu.putStringArrayList("musicname", musicname);
intent.putExtras(bu);
intent.putExtra(Mark, 1);
sendBroadcast(intent);
}
@Override
public void onDestroy(){
super.onDestroy();
System.out.println("onDestroy!");
mplayer.release();
}
public class MusicReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
int key=intent.getIntExtra(Mark, 0);
switch (key) {
case 2:
last();
System.out.println("last="+Index);
System.out.println("musicname="+musicname.size());

intent.setAction(MainActivity.main);
intent.putExtra(Mark, 2);
intent.putExtra("name", musicname.get(Index));
break;
case 3:
playing();
intent.setAction(MainActivity.main);
intent.putExtra(Mark, 3);
intent.putExtra("name", musicname.get(Index));
break;
case 4:
if(mplayer.isPlaying())
mplayer.pause();
intent.setAction(MainActivity.main);
intent.putExtra(Mark, 4);
break;
case 5:
mplayer.stop();
mplayer.reset();
intent.setAction(MainActivity.main);
intent.putExtra(Mark, 5);
break;
case 6:
next();
intent.setAction(MainActivity.main);
intent.putExtra(Mark, 6);
intent.putExtra("name", musicname.get(Index));
break;
case 7:
mplayer.reset();
Index=intent.getIntExtra("key", 0);
playing();
intent.setAction(MainActivity.main);
intent.putExtra(Mark, 3);
intent.putExtra("name", musicname.get(Index));
break;
default:
break;
}
sendBroadcast(intent);
}

}
private void last(){
if(Index-1<0)
Index=musicname.size()-1;
else
Index=Index-1;
mplayer.reset();
playing();

}
private void next(){
if(Index+1>=musicname.size())
Index=0;
else
Index=Index+1;
mplayer.reset();
playing();


}
private void playing(){
try {
mplayer.setDataSource(musicpath.get(Index));
mplayer.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mplayer.start();
}
}

--------------------编程问答-------------------- 界面:
然后我再说说问题:在歌曲列表中有一首歌不能播放、我写了
 mplayer.setOnErrorListener(new OnErrorListener() {                         @Override            public boolean onError(MediaPlayer mp, int what, int extra) {                // TODO Auto-generated method stub                System.out.println("Error!");                next();                intent.setAction(MainActivity.main);                intent.putExtra(Mark, 6);                intent.putExtra("name", musicname.get(Index));                sendBroadcast(intent);                return true;            }        });

在System.out.println()里面也显示执行了的,但还是出现了错误:
12-27 18:02:17.979: D/AndroidRuntime(17519): Shutting down VM
12-27 18:02:17.979: W/dalvikvm(17519): threadid=1: thread exiting with uncaught exception (group=0x40018578)
12-27 18:02:17.989: E/AndroidRuntime(17519): FATAL EXCEPTION: main
12-27 18:02:17.989: E/AndroidRuntime(17519): java.lang.NullPointerException
12-27 18:02:17.989: E/AndroidRuntime(17519):  at com.example.mymediaplayer4.musicService$2.onError(musicService.java:59)
12-27 18:02:17.989: E/AndroidRuntime(17519):  at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1472)
12-27 18:02:17.989: E/AndroidRuntime(17519):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-27 18:02:17.989: E/AndroidRuntime(17519):  at android.os.Looper.loop(Looper.java:130)
12-27 18:02:17.989: E/AndroidRuntime(17519):  at android.app.ActivityThread.main(ActivityThread.java:3687)
12-27 18:02:17.989: E/AndroidRuntime(17519):  at java.lang.reflect.Method.invokeNative(Native Method)
12-27 18:02:17.989: E/AndroidRuntime(17519):  at java.lang.reflect.Method.invoke(Method.java:507)
12-27 18:02:17.989: E/AndroidRuntime(17519):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
12-27 18:02:17.989: E/AndroidRuntime(17519):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
12-27 18:02:17.989: E/AndroidRuntime(17519):  at dalvik.system.NativeStart.main(Native Method)
--------------------编程问答-------------------- 求大神指点!
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,