2016-07-30 59 views
0

我正在开发一个android应用,其中用户能够读取书籍并聆听该书籍的录制音频。我正在使用翻转视图在页面之间切换。当适配器在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

嗨特哈斯...... !!谢谢,我会试试这个。 –

+0

同样的问题再次创建? –

+0

你好Tejas .. !!是的,问题仍然存在。我试过你的解决方案,但没有为我工作。我不知道它为什么会发生。我试图在onPause()的所有方法上调用mp.stop()。 onStop(),OnResume(),onDestroy(),但至今没有任何东西。 –

0

首先,在我看来,你不应该在适配器做到这一点。 片段/活动是更好的地方。 然后你有像onPauseonResume这是最好的地方开始和停止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并且在里面有关键帧的时候,它基本上可以正常工作。 请尝试使用onPause方法中的'mediaPlayer.pause()'。应该真的为你工作。如果你愿意的话,甚至可以使用'adapter.stopMusic()'方法并从'onPause()'调用它。 –

+0

嗨J.D.我早些时候尝试过这种方法,甚至提出了一种方法,我调用mp.stop(),并在onBackPressed()中调用该方法。在我的活动中。当我试图调试类时,我发现该方法被称为onBackPressed(),但音频仍在后端进行。我将尝试将adpater.stopMusic()方法如上所述,并让您知道该方法是否有效。非常感谢你的帮助。 :) –

相关问题