错误,而试图从远程MP3文件的Android的检索元数据 [英] Error while trying to retrieve Metadata from a remote MP3 file Android
问题描述
我工作的无线电Streming应用程序为Android。
音乐是很好收到并在MediaPlayer类出战,但问题是,当我尝试检索元数据,在App块,并返回错误。
这是code:
包com.tests.mediaplayer1;
进口java.io.IOException异常;
进口android.media.AudioManager;
进口android.media.MediaMetadataRetriever;
进口android.media.MediaPlayer;
进口android.os.Bundle;
进口android.app.Activity;
进口android.content.Context;
进口android.util.Log;
进口android.view.Menu;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;
进口android.widget.SeekBar;
进口android.widget.SeekBar.OnSeekBarChangeListener;
进口android.widget.TextView;公共类MainActivity延伸活动{私人按钮btn_ preV;
私人按钮btn_pause;
私人按钮btn_play;
私人按钮btn_next;
私人TextView的txt_song_title;
私人搜索栏seekBar_volume;私人的MediaPlayer媒体播放器;
私人MediaMetadataRetriever猎犬;
私人字符串URL =http://support.k-designed.net/test-z/music/Accordossie.mp3;
私人AudioManager audioManager;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); btn_ preV =(按钮)findViewById(R.id.btn_ preV);
btn_pause =(按钮)findViewById(R.id.btn_pause);
btn_play =(按钮)findViewById(R.id.btn_play);
btn_next =(按钮)findViewById(R.id.btn_next);
txt_song_title =(的TextView)findViewById(R.id.txt_song_title);
seekBar_volume =(搜索栏)findViewById(R.id.seekBar_volume);
媒体播放器=新的MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); audioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
INT maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
INT curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); seekBar_volume.setMax(maxVolume);
seekBar_volume.setProgress(curVolume); seekBar_volume.setOnSeekBarChangeListener(新OnSeekBarChangeListener(){ @覆盖
公共无效onStopTrackingTouch(搜索栏搜索栏){
// TODO自动生成方法存根 } @覆盖
公共无效onStartTrackingTouch(搜索栏搜索栏){
// TODO自动生成方法存根 } @覆盖
公共无效onProgressChanged(搜索栏搜索栏,INT进步,
布尔FROMUSER){
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,进度,0); }
}); btn_play.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(视图v){
尝试{
mediaPlayer.setDataSource(URL);
retriever.setDataSource(URL);
媒体播放器prepare()。 //可能需要很长时间! (用于缓冲等)
mediaPlayer.start();
txt_song_title.setText(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE));
}赶上(例外五){
e.printStackTrace();
}
}
}); btn_pause.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(视图v){
mediaPlayer.pause(); }
});
}@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
//充气菜单;如果是present这增加了项目操作栏。
。getMenuInflater()膨胀(R.menu.main,菜单);
返回true;
}
}
这是我的错误:
java.lang.IllegalStateException
在android.media.MediaPlayer.setDataSource(本机方法)
在com.tests.mediaplayer1.MainActivity $ 2.onClick(MainActivity.java:84)
在android.view.View.performClick(View.java:2485)
在android.view.View $ PerformClick.run(View.java:9080)
在android.os.Handler.handleCallback(Handler.java:587)
在android.os.Handler.dispatchMessage(Handler.java:92)
在android.os.Looper.loop(Looper.java:130)
在android.app.ActivityThread.main(ActivityThread.java:3687)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:507)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:867)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
在dalvik.system.NativeStart.main(本机方法)
从错误code,我们可以观察报告如下错误
java.lang.IllegalStateException
在android.media.MediaPlayer.setDataSource(本机方法)
如果你指的是本地
实施的MediaPlayer的
, IllegalStateException异常
在的MediaPlayer
对象为null,则抛出。
从您的源,如果我们检查猎犬
,我们可以观察到你声明这个变量,但还没有创建一个对象。在你的源代码,请创建的MediaPlayer
对象之前,请尝试以下code。
retreiver =新MediaMetadataRetriever();
随着这一变化,将创建猎犬
对象和您的来电的setDataSource
即 retriever.setDataSource(URL);
会成功
I'm working on a Radio Streming application for Android. The music is well recieved and played by the MediaPlayer class, but the problem is when I try to retrieve the Metadata, the App blocks and returns errors. This is the code:
package com.tests.mediaplayer1;
import java.io.IOException;
import android.media.AudioManager;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button btn_prev;
private Button btn_pause;
private Button btn_play;
private Button btn_next;
private TextView txt_song_title;
private SeekBar seekBar_volume;
private MediaPlayer mediaPlayer;
private MediaMetadataRetriever retriever;
private String url = "http://support.k-designed.net/test-z/music/Accordossie.mp3";
private AudioManager audioManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_prev = (Button) findViewById(R.id.btn_prev);
btn_pause = (Button) findViewById(R.id.btn_pause);
btn_play = (Button) findViewById(R.id.btn_play);
btn_next = (Button) findViewById(R.id.btn_next);
txt_song_title = (TextView) findViewById(R.id.txt_song_title);
seekBar_volume = (SeekBar) findViewById(R.id.seekBar_volume);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
seekBar_volume.setMax(maxVolume);
seekBar_volume.setProgress(curVolume);
seekBar_volume.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
}
});
btn_play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
mediaPlayer.setDataSource(url);
retriever.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();
txt_song_title.setText(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE));
} catch(Exception e) {
e.printStackTrace();
}
}
});
btn_pause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.pause();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
And this is the error I get:
java.lang.IllegalStateException
at android.media.MediaPlayer.setDataSource(Native Method)
at com.tests.mediaplayer1.MainActivity$2.onClick(MainActivity.java:84)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
From the error code, we can observe the reported error as below
java.lang.IllegalStateException
at android.media.MediaPlayer.setDataSource(Native Method)
If you refer to the native
implementation of MediaPlayer
, IllegalStateException
is thrown when MediaPlayer
object is null.
From your source, if we check for retriever
, we can observe that you have declared this variable, but haven't created an object. In your sources, please try the following code before creating mediaPlayer
object.
retreiver = new MediaMetadataRetriever();
With this change, retriever
object would be created and your call to setDataSource
i.e. retriever.setDataSource(url);
would be successful.
这篇关于错误,而试图从远程MP3文件的Android的检索元数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!