나는 StandOutWindow 라이브러리를 사용하고 있습니다.이 곳에서 MusicPlayer를 만들려고 시도했습니다. This Tutorial 내 ListView는 노래를 표시하지만 노래를 클릭하면 앱이 다운됩니다. 나는 무엇을 놓치고 있습니까? 감사.내 ListView.onItemClickListner에서 PlaySong을 사용할 수 없습니까?
MainActivity
public void createAndAttachView(int id, FrameLayout frame) {
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.musicplayer, frame, true);
songView = (ListView) view.findViewById(R.id.lvMusicPlayer_songList);
songList = new ArrayList<Song>();
getSonglist();
Collections.sort(songList, new Comparator<Song>() {
public int compare(Song a, Song b) {
return a.getTitle().compareTo(b.getTitle());
}
});
SongAdapter songAdapter = new SongAdapter(this, songList);
songView.setAdapter(songAdapter);
songView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
musicService.playSong();
}
});
}
private void getSonglist() {
ContentResolver musicResolver = getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null,
null);
if (musicCursor != null && musicCursor.moveToFirst()) {
int titleColumn = musicCursor
.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor
.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor
.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST);
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songList.add(new Song(thisId, thisTitle, thisArtist));
} while (musicCursor.moveToNext());
}
}
MusicService
public void onCreate() {
super.onCreate();
songPosition = 0;
random = new Random();
mp = new MediaPlayer();
initMusicPlayer();
}
private void initMusicPlayer() {
mp.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setOnPreparedListener(this);
mp.setOnCompletionListener(this);
mp.setOnErrorListener(this);
}
public void setList(ArrayList<Song> theSong) {
songs = theSong;
}
public class MusicBinder extends Binder {
MusicService getService() {
return MusicService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return musicBind;
}
@Override
public boolean onUnbind(Intent intent) {
mp.stop();
mp.release();
return false;
}
public void playSong() {
mp.reset();
Song playSong = songs.get(songPosition);
songTitle = playSong.getTitle();
long currSong = playSong.getID();
Uri trackUri = ContentUris.withAppendedId(
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
currSong);
try {
mp.setDataSource(getApplicationContext(), trackUri);
} catch (Exception e) {
Log.e("MUSIC SERVICR", "Error setting data source", e);
}
mp.prepareAsync();
}
public void setSong(int songIndex) {
songPosition = songIndex;
}
@Override
public void onCompletion(MediaPlayer mp) {
if (mp.getCurrentPosition() > 0) {
mp.reset();
playNext();
}
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.v("MUSIC PLAYER", " Playback Error");
mp.reset();
return false;
}
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
public int getPosition() {
return mp.getCurrentPosition();
}
public int getDur() {
return mp.getDuration();
}
public boolean isPng() {
return mp.isPlaying();
}
public void pausePlayer() {
mp.pause();
}
public void seek(int position) {
mp.seekTo(position);
}
public void go() {
mp.start();
}
public void playPrev() {
songPosition--;
if (songPosition < 0)
songPosition = songs.size() - 1;
playSong();
}
public void playNext() {
if (shuffle) {
int newSong = songPosition;
while (newSong == songPosition) {
newSong = random.nextInt(songs.size());
}
songPosition = newSong;
} else {
songPosition++;
if (songPosition >= songs.size())
songPosition = 0;
}
playSong();
}
public void onDestroy() {
stopForeground(true);
;
}
public void setShuffle() {
if (shuffle)
shuffle = false;
else
shuffle = true;
}
로그 캣
04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932)에서 기계적 인조 인간. widget.AdapterView.performItemClick (AdapterView.java:301) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.widget.AbsListView.performItemClick (AbsListView.java:1510) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.widget.AbsListView $ PerformClick.run (AbsListView.java:3339) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.widget. AbsListView.onTouchEvent (AbsListView.java:4635) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) android.view.View.dispatchTouchEvent (View.java:7817)에서 04-19 23시 37분 : 043317 : E/AndroidRuntime (8932) : android.view.View.View.ViewGroup.dispatchTouchEvent (ViewGroup.java:2435) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.View.ViewGroup.dispatchTouchEvent ViewGroup.java:2159) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.Vie (ViewGroup.java : 2441) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2174) 04-19 23:37 : wGroup.dispatchTransformedTouchEvent 04.917 : E/AndroidRuntime (8932) android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2441)에서 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932)에서 android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2174) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2441)에서 04-19 23 : 37 : 04.917 : E/(8932) AndroidRuntime : android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2174)에서 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java에서 : 2441) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8 932) : android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2174) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.View.dispatchPointerEvent (View.java:8025) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:4675) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess (ViewRootImpl.java:4563) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java : 4157) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java:4214) 04-19 23 : 37 : 04.917 : E/AndroidRuntime 8932) : android.view.ViewRootImpl $ InputStage.forward (ViewRootImpl.java:4183),363,210 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) android.view.ViewRootImpl $ AsyncInputStage.forward (ViewRootImpl.java:4268)에서 04-19 23 : 37 : 04.917/AndroidRuntime (8932) E : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl $ AsyncInputStage.apply에서 (ViewRootImpl.java 04-19 23 android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:4191)에서 : 4325) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:4157) 04-19 23 : 37 : 04.917 : E/AndroidRuntime 8932) : 안드로이드에서.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java:4214) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl $ InputStage.forward (ViewRootImpl.java:4183) 04 -19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:4191) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : at android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:4157) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:6317) 04 -19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:6255) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android. view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:6226) 04-19 23 : 37 : 04.917 : E/Andr oidRuntime (8932) : android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:6397) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver. 자바 : 188) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.os.MessageQueue.nativePollOnce (기본 메소드) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.os.MessageQueue.next (MessageQueue.java:132) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.os.Looper.loop (Looper.java:124) 04- 19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : android.app.ActivityThread.main (ActivityThread.java:5493) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : java.lang .reflect.Method.invokeNative (네이티브 메소드) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : java.lang.reflec t.Method.invoke (Method.java:525) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1209) 04-19 23 : 37 : 04.917 : E/AndroidRuntime (8932) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1025) 04-19 23 : 37 : 04.917 : E/AndroidRuntime 8932) : at dalvik.system.NativeStart.main (네이티브 메서드)
가 다음 로그 캣을 게시 setOnItemClickListener 코드를 제거 할 수 있습니다. –
레이아웃 파일을 넣으십시오. –