2016-07-30 9 views
0

사용자가 책을 읽고 해당 책의 녹음 된 오디오를들을 수있는 Android 앱을 개발 중입니다. 플립보기를 사용하여 페이지를 전환합니다.안드로이드 앱에서 어댑터가 닫혀있을 때 오디오 플레이어를 중지하십시오.

은 여기 내 주요 활동입니다 :

private class FullBook extends AsyncTask<String, String, String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(Personal_Library_Click.this); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... strings) { 

      List<NameValuePair> params = new ArrayList<NameValuePair>(); 

      params.add(new BasicNameValuePair("user_id", userId)); 
      params.add(new BasicNameValuePair("book_id", BookIdpref)); 

      json = jParse.makeHttpRequest(url_getBook, "GET", params); 

      try { 

       JSONArray jsonary = json.getJSONArray("list"); 

       Log.e("This is the books response", " " + json); 

       arrayVideos = new ArrayList<HashMap<String, String>>(); 
       for (int i = 0; i < jsonary.length(); i++) { 

        hashVideos = new HashMap<String, String>(); 


        JSONObject local_obj = (JSONObject) jsonary.get(i); 

        if (local_obj.toString().contains("image")) { 
         Image = local_obj.getString("image"); 
         hashVideos.put("image", Image); 
        } 

        if (local_obj.toString().contains("image_id")) { 
         ImId = local_obj.getString("image_id"); 
         hashVideos.put("imageId", ImId); 

        } 

        Log.e("Image ID : ", " " + ImId); 

        arrayVideos.add(hashVideos); 

       } 

      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      pDialog.dismiss(); 

      flipView.setAdapter(new FlipAdapter(Personal_Library_Click.this, arrayVideos)); 

     } 
    } 

그리고 그녀는 내 어댑터입니다 :

public class FlipAdapter extends BaseAdapter implements OnClickListener { 

public interface Callback { 
} 

private LayoutInflater inflater; 
private Callback callback; 
private ArrayList<HashMap<String, String>> data; 
public lazyloading.ImageLoader imageLoader; 
private Activity activity; 

MediaPlayer mp; 

public FlipAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
    activity = a; 

    data = d; 
    inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader = new lazyloading.ImageLoader(activity.getApplicationContext()); 

} 

public void setCallback(Callback callback) { 
    this.callback = callback; 
} 

@Override 
public int getCount() { 
    return data.size(); 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public boolean hasStableIds() { 
    return true; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 

    if(convertView == null){ 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.page_flip, parent, false); 

     HashMap<String, String> hashmaparray = new HashMap<String, String>(); 
     hashmaparray = data.get(position); 


     holder.BookPages = (ImageView) convertView.findViewById(R.id.book_page); 
     holder.ShowVideo = (VideoView) convertView.findViewById(R.id.show_video); 
     holder.ShowVideo.setVisibility(View.INVISIBLE); 

     if(activity.toString().contains("Personal_Library_Click")){ 

      String image =hashmaparray.get("image"); 

      imageLoader.DisplayImage(image, holder.BookPages); 

     } 

     if(activity.toString().contains("AdminBookFlip")){ 

      String im = hashmaparray.get("image"); 
      imageLoader.DisplayImage(im, holder.BookPages); 

      String v = hashmaparray.get("video"); 

      mp=new MediaPlayer(); 

      try{ 
       mp.setDataSource(v);//Write your location here 
       mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
       mp.prepare(); 
       mp.start(); 

      }catch(Exception e) { 
       e.printStackTrace(); 
      } 

     } 

     if(activity.toString().contains("ViewBookVideo")) { 

      String im = hashmaparray.get("image"); 
      imageLoader.DisplayImage(im, holder.BookPages); 
     } 

     convertView.setTag(holder); 
    }else{ 

     holder = (ViewHolder) convertView.getTag(); 

    } 

    //TODO set a text with the id as well 

    return convertView; 
} 

static class ViewHolder{ 
    ImageView BookPages; 
    VideoView ShowVideo; 
} 

@Override 
public void onClick(View v) { 
    switch(v.getId()){ 
    } 
} 

} 

내가이 활동을 열 때 완벽하게 실행됩니다. 그러나 활동을 닫으면 오디오는 백그라운드에서 계속 실행됩니다. 이 활동에서 돌아 가면 오디오를 중단해야합니다. 어댑터 null onBackPressed() 만들려고했지만 작동하지 않았다. 어느 누구도이 문제를 해결하도록 안내해 줄 수 있습니까? 당신이 어댑터에서이 작업을 수행해서는 안 내 생각에 처음에는 감사

답변

0

패스 MediaPlayer를의 어댑터 클래스 객체의 객체와 어댑터

MediaPlayer mp=new MediaPlayer(); 

flipView.setAdapter(new FlipAdapter(Personal_Library_Click.this, arrayVideos, mp));//mp is Mediaplayer object 


//Stop Audio 

    @Override 
    public void onPause(){ 
    //media player stops 
    super.onPause(); 
} 
+0

안녕 Tejas ... !! 고마워, 나는 이것을 시도 할 것이다. –

+0

동일한 문제가 다시 발생합니까? –

+0

안녕하세요 Tejas .. !! 예, 문제가 지속됩니다. 나는 당신의 해결책을 시도했지만 나를 위해 일하지 않았다. 나는 왜 그것이 일어나고 있는지 모른다. 모든 메서드 onPause()에서 mp.stop()을 호출하려고했습니다. onStop(), OnResume(), onDestroy()하지만 지금까지는 아무 것도 입지 않았습니다. –

0

에서 해당 개체를 사용합니다. 조각/활동이 더 좋습니다. 그런 다음 에있는 및 이 MediaPlayer를 시작하고 중지하는 데 가장 좋은 방법입니다.

private MediaPlayer mediaPlayer; 
@Override 
public void onPause(){ 
    //media player stops 
    super.onPause(); 
} 
@Override 
public void onResume(){ 
    //mediaPlayer initialize and start 
    super.onResume(); 
} 
+0

안녕하세요 J.D. 저는 이미 이것을 시도했지만 저를 위해 일하지 않았습니다. 어쨌든 도와 주셔서 감사합니다. –

+0

나는 그것에 대해 좀 더 생각하고 있었고 간단한 프로젝트에서 사용하려고 시도했다. 기본적으로 mediaPlayer를 적절하게 처리하고 내부에 키 프레임이있는 적절한 mp3를 가지고있을 때 나를 위해 잘 작동합니다. onPause 메서드에서'mediaPlayer.pause()'를 사용해보십시오. 정말로 당신을 위해 일해야합니다. 원하는 경우,'adapter.stopMusic()'메소드를 가지고'onPause()'로부터 호출 할 수도 있습니다. –

+0

안녕하세요 J.D. 나는이 방법을 일찍 시도했는데 mp.stop()을 호출하고 onBackPressed()에서 해당 메서드를 호출하는 메서드를 만들었습니다. 내 활동에서. 내가 클래스를 디버깅 할 때 메서드가 onBackPressed() 호출되고 있지만 오디오가 여전히 백엔드에서 계속되고있는 것으로 나타났습니다. 위에서 말한 것처럼 adpater.stopMusic() 메서드를 넣고 작동하는지 여부를 알려줍니다. 도와 주셔서 정말 감사합니다. :) –