2012-08-12 17 views
5

उच्च और निम्न खोजना मेरी समस्या के लिए कोई परिणाम नहीं मिला है। इसलिए मैं अंततः कुछ सहायता के लिए अनुरोध करने के लिए पोस्ट कर रहा हूं।प्रारंभ करने के लिए बाहरी गतिविधि पर प्रारंभ करें सक्रियताफॉररेट कैसे करें?

मेरे पास दो ऐप हैं, दोनों मेरे द्वारा लिखे गए हैं। ऐप ए ने Intent.putExtra() के माध्यम से पैरामीटर में गुजरने वाले ऐप बी लॉन्च किया। जब ऐप बी लॉन्च किया जाता है तो यह पूरी तरह से ठीक काम करता है पैरामीटर अच्छी तरह से पारित होते हैं।

हालांकि, मुझे ऐप ए को प्रतिक्रिया वापस करने का कोई तरीका नहीं मिल रहा है। StartActivityForResult() का उपयोग करके मुझे हमेशा RESULT_CANCELED के साथ सक्रियता Result() पर तुरंत दिया गया। आगे निरीक्षण पर, लॉगकैट ने मुझे चेतावनी दी "गतिविधि एक नया कार्य के रूप में लॉन्च हो रही है, इसलिए गतिविधि परिणाम रद्द करना"।

मैंने विभिन्न लॉन्च मोड, एक्शन फ़िल्टर (android.intent.action.PICK) के साथ ऐप बी की गतिविधि करने की कोशिश की, लेकिन कुछ भी नहीं मैंने कुछ भी बदल दिया।

क्या मैं असंभव करने की कोशिश कर रहा हूं? जो मैं समझता हूं उससे, मैं जो करने का प्रयास कर रहा हूं वह डिवाइस की फोटो गैलरी से चित्र लेने के लिए तीसरे पक्ष की गतिविधि का उपयोग करने के समान होना चाहिए।

संपादित करें:

ठीक है, मैं गतिविधि बी से लॉन्चर श्रेणी को हटाने की कोशिश की लेकिन यह अभी भी काम नहीं करता। यहां मेरी गतिविधि है:

<activity android:name=".${CLASSNAME}" android:label="@string/app_name" android:configChanges="mcc|mnc|locale|keyboardHidden|orientation" android:launchMode="standard"> 
    <intent-filter> 
     <action android:name="android.intent.action.PICK" /> 
    </intent-filter> 
</activity> 

क्या किसी को वास्तव में यह काम करने के लिए मिला है? मुझे लगता है कि एक और ऐप की एक गतिविधि शुरू करने पर संदेह करना शुरू हो रहा है, परिणाम कभी वापस नहीं आ सकता है क्योंकि ऐसा लगता है कि यह हमेशा एक नया कार्य शुरू करेगा चाहे आप "इरादा-फ़िल्टर" में क्या डालते हैं।

+0

जो कोड आप उपयोग कर रहे हैं उसे पोस्ट करें और गतिविधि बी के लिए इरादा लॉन्च करें। आपको ऐसा कुछ करने में सक्षम होना चाहिए: 'this.setResult (Activity.RESULT_OK, डेटा); दूसरी गतिविधि में पहले वापस लौटने के लिए। – FoamyGuy

+0

क्या आप अपनी मेनिफेस्ट फाइल पोस्ट कर सकते हैं? हो सकता है कि गतिविधि बी में कुछ विशेष टैग – nandeesh

+0

हम्म ... गतिविधि बी में <श्रेणी android: name = "android.intent.category.LAUNCHER" /> क्या इससे समस्या आती है? मैं अभी अपनी कार्य मशीन पर नहीं हूं। मैं इसे हटाने का प्रयास करूंगा और देख सकता हूं कि यह काम करता है या नहीं। बात जो मैंने पढ़ी है, वह एक ऐसी गतिविधि शुरू करने से है जो एक ही पैकेज का हिस्सा न हो, हमेशा एक नए कार्य में शुरू होगी? यदि ऐसा है, तो startActivityForResult किसी अन्य एपीके पर बाहरी गतिविधि शुरू करने के लिए काम नहीं करेगा? –

उत्तर

0

अपनी गतिविधि बी में, आप कुछ इस तरह होना चाहिए,

Intent intent = new Intent(); 
setResult(Activity.RESULT_OK, intent); 
finish(); 

या हो सकता है,

setResult(Activity.RESULT_OK); 
finish(); 

जहां गतिविधि ए के लिए किसी भी डेटा पास करने की जरूरत नहीं है

अन्यथा यह हमेशा परिणाम कोड Activity.RESULT_CANCELED के साथ समाप्त होगा;

एक बच्चे गतिविधि किसी भी कारण से (जैसे दुर्घटनाग्रस्त के रूप में) के लिए विफल रहता है, माता पिता गतिविधि RESULT_CANCELED कोड के साथ एक परिणाम प्राप्त होगा।

उम्मीद है कि इससे मदद मिलती है।

+1

मैंने इसे लागू किया था। समस्या यह है कि गतिविधि ए को गतिविधि बी समाप्त होने से पहले एक्टिविटी रिसेट() पर भी बुलाया जाता है। लॉगकैट मुझे देता है "गतिविधि एक नया कार्य के रूप में लॉन्च हो रही है, इसलिए गतिविधि परिणाम रद्द करना"। तो ऐसा लगता है कि गतिविधि बी को एक नए कार्य के रूप में लॉन्च किया गया है, जो आश्चर्यजनक नहीं होना चाहिए क्योंकि यह एक अलग एपीके ऐप है? छवि पिकर जैसे उपयोगिता गतिविधियों को कैसे लिखा जाता है? –

+0

@ Lf3T-Hn4D जैसा कि आपने बताया है कि आपके पास 'लॉन्चर' श्रेणी है, यह गतिविधि को नए कार्य के रूप में शुरू करेगी। तो इसे लॉन्च करने वाली गतिविधि से पूरी तरह से स्वतंत्र किया जाएगा। उस श्रेणी शैली को हटाएं और कोशिश करें। http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK –

+0

आह .. ठीक है। जब मैं अपनी कार्य मशीन पर वापस आऊंगा तो मैं इसे आज़माकर वापस रिपोर्ट करूंगा। :-) धन्यवाद –

9

सुनिश्चित करें कि आपके द्वारा लॉन्च की जाने वाली गतिविधि में एंड्रॉइड नहीं है: लॉन्च मोड इसे मैनिफेस्ट में सेट करता है और एंड्रॉइड की जांच करता है: taskAffinity का उपयोग नहीं किया जा रहा है। यहाँ देखें:

http://developer.android.com/guide/topics/manifest/activity-element.html#aff

सुनिश्चित करें कि आशय आप गतिविधि FLAG_ACTIVITY_NEW_TASK उस पर सेट नहीं है शुरू करने के लिए उपयोग कर रहे हैं। यहाँ देखें:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

विशेष नोट में: "यह झंडा जब फोन करने वाले से गतिविधि शुरू किया जा रहा एक परिणाम के अनुरोध कर रहा है नहीं किया जा सकता।"

यदि गतिविधि को नए कार्य के हिस्से के रूप में लॉन्च किया जा रहा है तो एंड्रॉइड तुरंत एक्टिविटी रिसैट() को RESULT_CANCELED के साथ कॉल करेगा क्योंकि एक कार्य में एक गतिविधि किसी अन्य कार्य को परिणाम नहीं दे सकती है, केवल एक ही कार्य में गतिविधियां एक ही मुद्दा मैं स्रोत कोड पर एक दृष्टि डाली होने ऐसा करते हैं।

+0

बहुत मदद, धन्यवाद – Ninja

1

, और क्यों NEW_TASK झंडा जोड़ा जाएगा। यदि या तो स्रोत गतिविधि एक या लक्ष्य गतिविधि बी एक उदाहरण लांच का उपयोग कर रहे

बाहर कर देता है मोड, NEW_TASK ध्वज स्वचालित रूप से जोड़ा जाता है:

if (sourceRecord.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) { 
     // The original activity who is starting us is running as a single 
     // instance... this new activity it is starting must go on its 
     // own task. 
     launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK; 
    } else if (r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE 
      || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK) { 
     // The activity being started is a single instance... it always 
     // gets launched into its own task. 
     launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK; 
    } 

जैसा कि आप दोनों ऐप्स के मालिक हैं, आपको यह सुनिश्चित करने में सक्षम होना चाहिए कि उन लॉन्च मोड को प्रकट या इरादे में परिभाषित नहीं किया गया है।

अब तक मुझे अनजाने में सेट किए गए NEW_TASK ध्वज का कोई अन्य उदाहरण नहीं मिला।

संबंधित मुद्दे