जैसा कि आप देख सकते हैं, मेरे पास यह PlayLesson_01 गतिविधि है जो एक ही समय में छवियों और ऑडियो प्रदर्शित करती है। इस गतिविधि में दो हैंडलर हैं, एक छवियों और ऑडियो को नियंत्रित करने के लिए, जबकि दूसरा सबक पूरा करेगा और पिछली गतिविधि (पाठ मेनू) पर वापस चला जाएगा।ऑनबैक एक गतिविधि के भीतर एक हैंडलर को मारने के लिए दबाया गया - एंड्रॉइड
लक्ष्य: पिछली गतिविधि पर वापस जाने के लिए हार्ड बैक बटन पर क्लिक करें और छवियों और ऑडियो को खेलना बंद करें।
समस्या: जब मैं कठिन पर "वापस" क्लिक मैं पिछले गतिविधि के लिए वापस जाने के लिए सक्षम हूँ, लेकिन ऑडियो अभी भी है या हैंडलर मारने रोकने में सक्षम नहीं playing.I'm जो गतिविधि के भीतर शुरू हुआ।
प्रश्न: मैं उन हैंडलरों को पूरी तरह से कैसे मार सकता हूं या रोक सकता हूं?
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.ViewSwitcher.ViewFactory;
public class PlayLesson_01 extends Activity implements OnItemSelectedListener,
ViewFactory, Runnable {
// Setting up images
// Keeping all Images in array references to our images
public Integer[] mThumbIds = { R.drawable.nouraniyah,
R.drawable.back_angle, R.drawable.back_fox, R.drawable.back_apple,
R.drawable.back_twitter, R.drawable.back_thunderbird };
// setting up music
int[] myMusic = { R.raw.button_3, R.raw.button_3, R.raw.button_3,
R.raw.button_3, R.raw.button_3, R.raw.button_3 };
int mNext;
private ImageSwitcher mSwitcher;
MediaPlayer mp;
Handler mHandlerWholeLesson = new Handler();
Runnable mRunnableWholelesson = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
startActivity(new Intent("com.example.AmazingGame.LESSONONE"));
}
};
Handler mHandlerNextfile = new Handler();
Runnable mRunnableNextFile = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
mp.setOnCompletionListener(mListener);
mp.start();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.image_switcher); // it could be lesson one
// layout.
mSwitcher = (ImageSwitcher) findViewById(R.id.imgswitcher);
mSwitcher.setFactory(this);
mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
Gallery g = (Gallery) findViewById(R.id.gallery);
g.setAdapter(new ImageAdapter(this));
g.setOnItemSelectedListener(this);
// usual onCreate stuff here, then...
// either here or whenever you want to start the sequence
mNext = 0;
startNextFile();
// Is this good !! Yes it is. count the time for all audio.
mHandlerWholeLesson.postDelayed(mRunnableWholelesson, 25000);
}
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent("com.example.AmazingGame.LESSONONE"));
System.exit(0);
mHandlerNextfile
.removeCallbacks(mRunnableNextFile, PlayLesson_01.class);
mHandlerWholeLesson.removeCallbacks(mRunnableWholelesson,
PlayLesson_01.class);
PlayLesson_01.this.finish();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
// mHandlerNextFile.removeCallbacksAndMesssages(PlayLesson_01.class);
}
public void onItemSelected(AdapterView<?> parent, View v,
final int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
@Override
public View makeView() {
ImageView i = new ImageView(this);
i.setBackgroundColor(0xFF000000);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
return i;
}
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mThumbIds[position]);
i.setAdjustViewBounds(true);
i.setLayoutParams(new Gallery.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
i.setBackgroundResource(R.drawable.picture_frame);
return i;
}
private Context mContext;
}
OnCompletionListener mListener = new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
startNextFile();
}
};
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
this.finish();
}
public void startNextFile() {
if (mNext < myMusic.length) {
mp = MediaPlayer.create(this, myMusic[mNext]);
mSwitcher.setImageResource(mThumbIds[mNext++]);
mHandlerNextfile.postDelayed(mRunnableNextFile, 3000);
}
}
@Override
public void run() {
// TODO Auto-generated method stub
}
}
धन्यवाद। यह अब काम करता है। मैंने दोनों हैंडलर पैरामीटर को "शून्य" में बदल दिया। मैंने System.exit (0) निकाला। – Jawwalcom
हैंडलर.removeCallbacksAndMessages (शून्य); सभी हैंडलर को हटाने के लिए कमाल है। –
प्लेस्टैक को रोकने के लिए ऑनस्ट्राय() विधि को ओवरराइड करें और mp.release() को कॉल करें .. – SHB