2016-07-30 10 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

Hi Tejas ... !!ありがとう、私はこれを試してみます。 –

+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を適切に処理し、内部にキーフレームを持つ適切なmp3を持っているときには、うまく動作しています。 onPauseメソッドから 'mediaPlayer.pause()'を使ってみてください。本当にあなたのために働く必要があります。必要に応じて 'adapter.stopMusic()'メソッドをいくつか持ち、 'onPause()'から呼び出すことさえできます。 –

+0

こんにちはJ.D.私はこのメソッドを先に試してみました。さらに、mp.stop()を呼び出してそのメソッドをonBackPressed()で呼び出すメソッドを作成しました。私の活動の中で。私はクラスをデバッグしようとすると、メソッドがonBackPressed()が呼び出されているが、オーディオはまだバックエンドで行われていることがわかりました。上記のようにadpater.stopMusic()メソッドを配置し、それが動作するかどうかを知らせます。手伝ってくれてどうもありがとう。 :) –

関連する問題