2016-08-18 4 views
1

여기 내 코드입니다 :활동을 계속하는 방법?

package com.justforyou.bestnarutosongs; 


import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.app.NotificationCompat; 
import android.util.Log; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.AdapterView; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.SeekBar; 
import android.widget.TextView; 
import java.util.ArrayList; 
import java.util.concurrent.TimeUnit; 

public class SongsListActivity extends AppCompatActivity 
{ 

public boolean IsPaused = false; 
public int Old_Song = -326523; 
public TextView NameD; 
public ImageView ImageD; 
public TextView RateD; 
public int II; 
public Runnable UpdateSongTime; 
public int startTime; 
public int IIII; 
public Handler myHandler = new Handler(); 
public SeekBar seekBar; 
public TextView Current_Time; 
public TextView Duration; 
public int Repeat_Value = 0; 
public ImageButton Stop; 
public Songs song; 
public ArrayList<Songs> Song; 
public ImageButton P_and_P = null; 
public ImageButton Repeat = null; 
public ImageButton Next = null; 
public ImageButton Previous = null; 
private MediaPlayer mediaplayer; 
private AudioManager mAudioManager; 
private AudioManager.OnAudioFocusChangeListener mOnAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() 
{ 
    @Override 
    public void onAudioFocusChange(int focusChange){ 
     if(focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK || focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT){ 
      mediaplayer.pause(); 
      IsPaused = true; 
      P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 
     } 
     else if(focusChange == AudioManager.AUDIOFOCUS_GAIN){ 
      mediaplayer.start(); 
     } 
     else if(focusChange == AudioManager.AUDIOFOCUS_LOSS){ 
      if(mediaplayer != null) 
      { 
       mediaplayer.pause(); 
       IsPaused = true; 
       P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 

      } 
     } 
    } 
}; 


public void showNotification() { 
    PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, SongsListActivity.class), 0); 
    Notification notification = new NotificationCompat.Builder(this) 
      .setTicker(NameD.getText()) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle(NameD.getText()) 
      .setContentText(RateD.getText()) 
      .setContentIntent(pi) 
      .setAutoCancel(false) 
      .build(); 

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    notificationManager.notify(0, notification); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_songs_list); 

    Repeat = (ImageButton) findViewById(R.id.Repeat); 
    Next = (ImageButton) findViewById(R.id.Next); 
    Previous = (ImageButton) findViewById(R.id.Previous); 
    NameD = (TextView) findViewById(R.id.NameD); 
    ImageD = (ImageView) findViewById(R.id.ImageD); 
    RateD = (TextView) findViewById(R.id.RateD); 
    P_and_P = (ImageButton) findViewById(R.id.P_and_P); 
    Stop = (ImageButton) findViewById(R.id.Stop); 
    Duration = (TextView) findViewById(R.id.Duration); 
    Current_Time = (TextView) findViewById(R.id.Current_Time); 
    seekBar = (SeekBar) findViewById(R.id.SeekBar); 
    seekBar.setClickable(false); 

    mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

    Song = new ArrayList<>(); 
    Song.add(new Songs("Alone", "Rate: 4.0", R.raw.alone, R.drawable.alone)); 
    Song.add(new Songs("Anger", "Rate: 4.5", R.raw.anger, R.drawable.anger)); 
    Song.add(new Songs("Bad Situation", "Rate: 3.6", R.raw.bad_situation, R.drawable.badsitu)); 
    Song.add(new Songs("Beni Soubi", "Rate: 4.0", R.raw.beni_soubi, R.drawable.beni)); 
    Song.add(new Songs("Confronting", "Rate: 3.2", R.raw.confronting, R.drawable.confronting)); 
    Song.add(new Songs("Daylight Of Konoha", "Rate: 4.7", R.raw.d_o_k, R.drawable.d_o_k)); 
    Song.add(new Songs("Dark Clouds", "Rate: 3.1", R.raw.dark_clouds, R.drawable.darkc)); 
    Song.add(new Songs("Dept. To The Front Lines", "Rate: 5.0", R.raw.departure_to_the_front_lines, R.drawable.d_t_t_f_l)); 
    Song.add(new Songs("Despair", "Rate: 3.6", R.raw.despair, R.drawable.despair)); 
    Song.add(new Songs("Dokushinjutsu(Mt. Neoboku)", "Rate: 2.9", R.raw.dokushinjutsu, R.drawable.dokushin)); 
    Song.add(new Songs("Emergence Of Talent", "Rate: 4.6", R.raw.emergence_of_talents, R.drawable.e_o_t)); 
    Song.add(new Songs("Evening", "Rate: 3.4", R.raw.evening, R.drawable.evening)); 
    Song.add(new Songs("Experienced Many Battles", "Rate: 4.0", R.raw.experienced_many_battles, R.drawable.e_m_b)); 
    Song.add(new Songs("Gekiha", "Rate: 4.0", R.raw.gekiha, R.drawable.gekiha)); 
    Song.add(new Songs("Genshi(Vision)", "Rate: 2.9", R.raw.genshi, R.drawable.genshi)); 
    Song.add(new Songs("Girei(Pain's Theme)", "Rate: 4.5", R.raw.girei, R.drawable.girei)); 
    Song.add(new Songs("Glued State", "Rate: 3.5", R.raw.glued_state, R.drawable.glue)); 
    Song.add(new Songs("Guren", "Rate: 3.5", R.raw.guren, R.drawable.guren)); 
    Song.add(new Songs("Heaven Shaking Event", "Rate: 5.0", R.raw.heaven_shaking_event, R.drawable.h_s_e)); 
    Song.add(new Songs("Hidan", "Rate: 3.0", R.raw.hidan, R.drawable.hidan)); 
    Song.add(new Songs("Hidden Will To Fight", "Rate: 2.1", R.raw.hidden_will_to_fight, R.drawable.h_w_t_f)); 
    Song.add(new Songs("Himoji", "Rate: 5.0", R.raw.himoji, R.drawable.himoji)); 
    Song.add(new Songs("Hinata and Neji", "Rate: 5.0", R.raw.hinata_vs_neji, R.drawable.hi_vs_ne)); 
    Song.add(new Songs("Homecoming", "Rate: 3.5", R.raw.homecoming, R.drawable.homecoming)); 
    Song.add(new Songs("I said I'm Naruto", "Rate: 5.0", R.raw.i_said_i_am_naruto, R.drawable.i_s_i_a_n)); 
    Song.add(new Songs("Jinchuuriki", "Rate: 2.5", R.raw.jinchuuriki, R.drawable.jinchu)); 
    Song.add(new Songs("Kakuzu", "Rate: 5.0", R.raw.kakuzu, R.drawable.kakuzu)); 
    Song.add(new Songs("Kokuten", "Rate: 5.0", R.raw.kokuten, R.drawable.kokuten)); 
    Song.add(new Songs("Kouen", "Rate: 5.0", R.raw.kouen, R.drawable.kouen)); 
    Song.add(new Songs("Nankou Furaku", "Rate: 5.0", R.raw.nankou_furaku, R.drawable.n_furu)); 
    Song.add(new Songs("Naruto Main Theme", "Rate: 5.0", R.raw.naruto_main_theme, R.drawable.narutomt)); 
    Song.add(new Songs("Orochimaru's Theme", "Rate: 3.8", R.raw.orochimaru_theme, R.drawable.orochi)); 
    Song.add(new Songs("Ranpatsu", "Rate: 5.0", R.raw.ranpatsu, R.drawable.ranpatsu)); 
    Song.add(new Songs("Risking It All", "Rate: 5.0+", R.raw.risking_it_all, R.drawable.r_i_a)); 
    Song.add(new Songs("Saika", "Rate: 4.9", R.raw.saika, R.drawable.saika)); 
    Song.add(new Songs("Sasuke's Destiny", "Rate: 5.0", R.raw.sasuke_destiny, R.drawable.sasudesti)); 
    Song.add(new Songs("Senya(Itachi's Theme)", "Rate: 5.0", R.raw.senya, R.drawable.senya)); 
    Song.add(new Songs("Shirotsumekusa", "Rate: 3.0", R.raw.shirotsumekusa, R.drawable.shirot)); 
    Song.add(new Songs("Shouryuu", "Rate: 5.0", R.raw.shouryuu, R.drawable.shouryuu)); 
    Song.add(new Songs("Shippuuden", "Rate: 5.0", R.raw.shippuuden, R.drawable.shippuuden)); 
    Song.add(new Songs("Turn Over", "Rate: 4.6", R.raw.turn_over, R.drawable.turn_over)); 

    SongsAdapter SongAdapter = new SongsAdapter(this, Song, R.color.Main_Color); 
    ListView listView = (ListView) findViewById(R.id.list_Col); 
    listView.setAdapter(SongAdapter); 

    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     int ProgressChanged = 0; 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 
      ProgressChanged = i; 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      mediaplayer.seekTo(ProgressChanged); 

     } 
    }); 

    Repeat.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (Repeat_Value == 0) { 
       Repeat_Value = 1; 
       Repeat.setImageResource(R.drawable.ic_repeat_one_white_48dp); 
      } else { 
       Repeat_Value = 0; 
       Repeat.setImageResource(R.drawable.ic_repeat_white_48dp); 
      } 
     } 
    }); 

    Next.setOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View view) { 

            if (mediaplayer != null) { 
             mediaplayer.release(); 
             mediaplayer = null; 

             if (II == (Song.size() - 1)) { 
              II = 0; 
             } else { 
              II += 1; 
             } 
             music_player(II); 

            } 
           } 
          } 
    ); 

    Previous.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View view) { 

             if (mediaplayer != null) { 
              mediaplayer.release(); 
              mediaplayer = null; 
              if (II == 0) { 
               II = (Song.size() - 1); 
              } else { 
               II -= 1; 
              } 
              music_player(II); 
             } 
            } 
           } 
    ); 

    P_and_P.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mediaplayer != null) { 
       if (!mediaplayer.isPlaying() || IsPaused) { 
        P_and_P.setImageResource(R.drawable.ic_pause_white_48dp); 
        IsPaused = false; 
        mediaplayer.start(); 
       } else { 
        P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 
        IsPaused = true; 
        mediaplayer.pause(); 
       } 
      } 

     } 
    }); 


    Stop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mediaplayer != null) { 
       P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 
       mediaplayer.pause(); 
       mediaplayer.seekTo(0); 
       IsPaused = true; 
      } 
     } 
    }); 



    listView.setOnItemClickListener 
      (new AdapterView.OnItemClickListener() 
      { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) 
       { 

        Log.v("1", "Just upon entering onItemClick"); 
        music_player(i); 
        showNotification(); 
       } 
      } 
      ); 
} 

public void music_player(int I) { 

    UpdateSongTime = new Runnable() { 
     public void run() { 
      startTime = mediaplayer.getCurrentPosition(); 
      if ((TimeUnit.MILLISECONDS.toSeconds((long) startTime)) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime)) < 10) { 
       Current_Time.setText(String.format("0%d:0%d", 
         TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
         TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
           TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. 
             toMinutes((long) startTime))) 
       ); 
      } else { 
       Current_Time.setText(String.format("0%d:%d", 
         TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
         TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
           TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. 
             toMinutes((long) startTime)))); 
      } 

      seekBar.setProgress((int) startTime); 
      myHandler.postDelayed(this, 100); 
     } 
    }; 


    II = I; 
    IIII = II; 
    int Current_Song; 
    song = Song.get(I); 

    //If mediaPlayer is not used before, this will make oldsong as present song. 
    if (Old_Song == -326523) { 
     Old_Song = song.getSong(); 
    } 

    Current_Song = song.getSong(); 

    //If mediaPlayer is paused. 
    if (IsPaused) { 
     P_and_P.setImageResource(R.drawable.ic_pause_white_48dp); 
     //If the song paused is same as the new song. 
     if (Current_Song == Old_Song) { 
      mediaplayer.start(); 
      NameD.setText(song.getNameOfSong()); 
      RateD.setText(song.getDeveloperRate()); 
      ImageD.setImageResource(song.getImage()); 
     } 

     //If the song Paused is not the new song. 
     else { 
      if (mediaplayer != null) { 
       mediaplayer.release(); 
       mediaplayer = null; 
      } 

      int result = mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); 

      if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
       mediaplayer = mediaplayer.create(SongsListActivity.this, song.getSong()); 
       seekBar.setMax(mediaplayer.getDuration()); 
       Old_Song = song.getSong(); 
       NameD.setText(song.getNameOfSong()); 
       RateD.setText(song.getDeveloperRate()); 
       ImageD.setImageResource(song.getImage()); 
       mediaplayer.start(); 
       if ((TimeUnit.MILLISECONDS.toSeconds((long) mediaplayer.getDuration()) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration()))) < 10) { 
        Duration.setText(String.format("0%d:0%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration()), 
          TimeUnit.MILLISECONDS.toSeconds((long) mediaplayer.getDuration()) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration())))); 
       } else { 
        Duration.setText(String.format("0%d:%d", 
          TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration()), 
          TimeUnit.MILLISECONDS.toSeconds((long) mediaplayer.getDuration()) - 
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration())))); 
       } 

       seekBar.setProgress((int) startTime); 
       myHandler.postDelayed(UpdateSongTime, 100); 

       mediaplayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        @Override 
        public void onCompletion(MediaPlayer mediaPlayer) { 
         P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 
         IsPaused = true; 
         if (mediaplayer != null) { 
          mediaplayer.release(); 
          mediaplayer = null; 
         } 
         if (Repeat_Value == 0) { 
          if (II == (Song.size() - 1)) { 
           II = 0; 
          } else { 
           II += 1; 
          } 
         } else { 
          II = IIII; 
         } 
         IsPaused = false; 
         music_player(II); 
        } 
       }); 
      } 
     } 
     IsPaused = false; 

    } else if (mediaplayer != null) { 
     //If mediaPlayer is already Playing a song. 
     if (mediaplayer.isPlaying()) { 
      P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 
      mediaplayer.pause(); 
      IsPaused = true; 
      if (Current_Song != Old_Song) { 
       NameD.setText(song.getNameOfSong()); 
       RateD.setText(song.getDeveloperRate()); 
       ImageD.setImageResource(song.getImage()); 
       if (mediaplayer != null) { 
        mediaplayer.release(); 
        mediaplayer = null; 
       } 
       P_and_P.setImageResource(R.drawable.ic_pause_white_48dp); 
       IsPaused = false; 
       music_player(II); 

      } 
     } 
    } 

    //If mediaPlayer is used for first time and if mediaPlayer is neither paused 
    else { 

     if (mediaplayer != null) { 
      mediaplayer.release(); 
      mediaplayer = null; 
     } 

     int result = mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); 

     if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
      mediaplayer = mediaplayer.create(SongsListActivity.this, song.getSong()); 
      seekBar.setMax(mediaplayer.getDuration()); 
      Old_Song = song.getSong(); 
      NameD.setText(song.getNameOfSong()); 
      RateD.setText(song.getDeveloperRate()); 
      ImageD.setImageResource(song.getImage()); 
      mediaplayer.start(); 
      if ((TimeUnit.MILLISECONDS.toSeconds((long) mediaplayer.getDuration()) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration()))) < 10) { 
       Duration.setText(String.format("0%d:0%d", 
         TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration()), 
         TimeUnit.MILLISECONDS.toSeconds((long) mediaplayer.getDuration()) - 
           TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration())))); 
      } else { 
       Duration.setText(String.format("0%d:%d", 
         TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration()), 
         TimeUnit.MILLISECONDS.toSeconds((long) mediaplayer.getDuration()) - 
           TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) mediaplayer.getDuration())))); 
      } 

      seekBar.setProgress((int) startTime); 
      myHandler.postDelayed(UpdateSongTime, 100); 

      P_and_P.setImageResource(R.drawable.ic_pause_white_48dp); 

      mediaplayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
       @Override 
       public void onCompletion(MediaPlayer mediaPlayer) { 
        P_and_P.setImageResource(R.drawable.ic_play_arrow_white_48dp); 
        IsPaused = true; 
        if (mediaplayer != null) { 
         mediaplayer.release(); 
         mediaplayer = null; 
        } 

        if (Repeat_Value == 0) { 
         if (II == (Song.size() - 1)) { 
          II = 0; 
         } else { 
          II += 1; 
         } 
        } else { 
         II = IIII; 
        } 
        IsPaused = false; 
        music_player(II); 


       } 
      }); 
     } 
    } 
} 


@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if(mediaplayer != null) 
    { 
     mediaplayer.release(); 
     mediaplayer = null; 
     mAudioManager.abandonAudioFocus(mOnAudioFocusChangeListener); 
    } 
} 
} 

지금 내가 원하는 알림을 클릭하면 SongsListActivity가 시작되었는지이지만, 다시 시작됩니다.

처음에는 노래가 재생되기 시작한 다음 seekbar가 업데이트되고 노래의 이미지, 이름 등이 업데이트됩니다.

이제 내비게이션 막대에서 뒤로 버튼을 누른 다음 활동을 파괴하지 않고 다시 앱을 연 다음이 활동이 재설정되지 않습니다 (즉, 노래의 모든 이름, 이미지 등) 활동을 떠나기 전의 상태로 표시됩니다.)하지만 동일한 프로세스를 반복하지만 생성 된 알림을 두드리는 것으로 활동을 열면 차이가 있습니다. 전체 활동이 재설정됩니다 (즉, 활동은 방금 시작된 것처럼 보입니다).

내가 어떻게해야 활동이 재설정되지 않고 계속 진행됩니까?

+2

가능한 [알림 클릭 : 활동이 이미 열려 있습니다] (http://stackoverflow.com/questions/12043671/notification-click-activity-already-open) – Bryan

+0

한 번에 한 가지 질문 만하십시오. 그리고 "제발 내버려 두지 마세요" –

답변

0

한 가지 해결책은 변경 내용을 .txt 파일에 저장하고 활동으로 돌아올 때 다시로드하는 것입니다.

관련 문제