मेरा आवेदन AsyncTask
शुरू करता है जो एक यूआरएल से एक फाइल डाउनलोड करता है। साथ ही यह एक स्टेटस बार Notification
बनाता है जो उपयोगकर्ता को डाउनलोड के प्रतिशत को पूरा करता है।एंड्रॉइड: मैं स्टेटस बार अधिसूचना द्वारा बनाए गए लंबित इंटेंट से AsyncTask तक कैसे पहुंचूं?
मैं अधिसूचना पर क्लिक करने के लिए अपना आवेदन जवाब देने की कोशिश कर रहा हूं। यदि डाउनलोड अभी भी प्रगति पर है, तो मैं DialogInterface
दिखाना चाहता हूं जो उनसे पूछता है कि क्या वे डाउनलोड को रोकना चाहते हैं। हाँ पर क्लिक करने से डाउनलोड बंद होना चाहिए।
मेरी समस्या यह है कि मुझे यकीन नहीं है कि मैं PendingIntent
से अपने Async कार्य को कैसे एक्सेस कर सकता हूं जिसे मैंने अधिसूचना के लिए सेट किया था। मैं आसानी से दिखाने के लिए DialogInterface
प्राप्त कर सकता हूं, लेकिन मुझे यकीन नहीं है कि गतिविधि को कैसे दिखाया जा रहा है, जहां डाउनलोड बंद करना है।
मैंने एक सहायक वर्ग बनाने की कोशिश की जिसमें अधिसूचना तक पहुंच थी और फाइल ऑब्जेक्ट डाउनलोड करने योग्य फ़ाइल का जिक्र है, लेकिन मुझे यह कहते हुए एक त्रुटि मिलती है कि ऑब्जेक्ट धारावाहिक नहीं है (यह Serializable
लागू करता है)। सहायक वर्ग में एक सदस्य भी शामिल था जो डाउनलोड की प्रगति को बनाए रखेगा, जो मैं इस बात के लिए उपयोग करता हूं कि संवाद दिखाने के लिए या नहीं।
मैं ब्रॉडकास्ट एक्शन और रिसीवर का उपयोग करने के बारे में सोच रहा था, लेकिन मुझे यकीन नहीं है कि रिसीवर कहां रखा जाए। क्या यह कक्षा में जाएगा जो AsyncTask
बढ़ाता है?
किसी भी मदद की सराहना की जाएगी। यह PendingIntent
Notification
से जुड़ा हुआ है। यदि आप अधिक कोड देखना चाहते हैं, तो बस पूछें।
public class DownloadNotificationActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent i = getIntent();
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE :
// Yes button clicked
// Stop download
finish();
break;
case DialogInterface.BUTTON_NEGATIVE :
// No button clicked
finish();
break;
}
}
};
if (/* download not complete */) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.stop_download).
setPositiveButton(R.string.yes, dialogClickListener).
setNegativeButton(R.string.no, dialogClickListener).show();
}
else {
// Access file
}
}
}
तो स्पष्ट होने के लिए, मेरे पास ViewDetailActivity
कक्षा है। इसमें DownloadFile
नामक एक आंतरिक वर्ग है जो AsyncTask
बढ़ाता है और जब उपयोगकर्ता स्क्रीन पर एक बटन क्लिक करता है तो उसे निष्पादित किया जाता है। doInBackground()
DownloadFile
की विधि में, एक एमपी 3 का एक डाउनलोड यूआरएल से शुरू होता है और स्टेटस बार Notification
डाउनलोड की गई फाइल की मात्रा के आधार पर बनाया और अपडेट किया जाता है। के PendingIntent
DownloadNotificationActivity
(कोड दिखाए गए) के साथ बनाया गया है और इसे "हाँ" चुना गया एक संवाद दिखाना चाहिए, AsyncTask
में डाउनलोड को रद्द करना चाहिए।
मेरे मुद्दा यह है कि मैं शब्द वापस DownloadFile
कार्य है कि डाउनलोड करने के लिए रद्द कर दिया गया प्राप्त करने की आवश्यकता है और मैं इसे रद्द करने के लिए DownloadNotificationActivity
से DownloadFile
तक पहुंचने का तरीका यकीन नहीं है।
अग्रिम धन्यवाद!
यही मुद्दा है कि मैं वास्तव में उपरोक्त गतिविधि में 'AsyncTask' का संदर्भ दे रहा हूं। मैंने 'AsyncTask' पर 'Serializable' को लागू करने का प्रयास किया और' लंबवत ') के रूप में स्थापित' इराद 'पर' putExtra() 'का उपयोग किया, लेकिन मुझे यह अपवाद मिला कि यह वस्तु क्रमबद्ध नहीं है। क्या AsincTask को मेरी गतिविधि में संदर्भित करने का कोई और तरीका है? – Shino
ठीक है मुझे लगता है कि जिस तरह से मैं इसे कर रहा हूं बस काम नहीं करेगा। जब मैंने स्टेटस बार अधिसूचना पर क्लिक किया था तो अधिसूचना कार्य मैंने केवल 'लंबित इंटेन्टेंट' के रूप में उपयोग के लिए किया था। 'AsyncTask' वास्तव में कक्षा में था जिसने स्क्रीन को संभाला जहां आप फ़ाइल डाउनलोड करने के लिए क्लिक कर सकते हैं। लगता है जैसे मुझे अपने 'AsyncTask' को' DownloadNotificationActivity' पर ले जाने की आवश्यकता है और उसे उस कक्षा के 'क्रेटेट' में निष्पादित करना है। फिर अधिसूचना के लिए 'onClick' ईवेंट को संभाल लें। मैं आपको बता दूंगा कि क्या होता है। – Shino
मेरी पिछली टिप्पणी में मैंने जो कहा वह कोशिश नहीं कर सका। आपकी सहायता @Motes के लिए धन्यवाद। मैंने विषय को अधिक जानकारी (नीचे) के साथ अद्यतन किया है। मुझे लगता है कि मैं इस बारे में गलत तरीके से जा रहा हूं। मुझे अन्य विकल्पों की तलाश करनी है। मैंने 'ब्रॉडकास्ट' और 'ब्रॉडकास्ट रिसीवर' की कोशिश करने के बारे में सोचा लेकिन मुझे यकीन नहीं है कि एक 'AsyncTask' पर रिसीवर कितनी अच्छी तरह से काम करेगा। – Shino