2012-11-14 9 views
5

शायद मैं इस बारे में गलत तरीके से जा रहा हूं, लेकिन मैं अपने एंड्रॉइड ऐपविजेट के क्लिक ईवेंट को अपने ऐप के भीतर जवाब देना चाहता हूं और एक गतिविधि लॉन्च करना चाहता हूं। उस समय मैंने PendingIntent सेट किया था, मेरे पास एक और Intent है जिसे मैं क्लिक करते समय लॉन्च करना चाहता हूं।किसी अन्य इरादे के अंदर इरादा भेजना

final Intent mLaunchIntent = (Intent) intent.getParcelableExtra(Widget.EXTRA_INTENT); 

जब मैं setOnClickPendingIntent फोन मैं इस लाइन से पहले है:: मेरी onStartCommand इस लाइन का उपयोग करता है

mSendingIntent.putExtra(Widget.EXTRA_INTENT, (Parcelable) mLaunchIntent); 

तो भले ही mLaunchIntent दोनों लाइनों में एक वैध Intent है, पहली पंक्ति में बहुत कुछ याद आ रही है आंकड़े का। startActivity पर कॉल करने में विफल रहता है क्योंकि Intent मान्य नहीं है।

अगर यह संभव है मैं सोच रहा हूँ, और कैसे, सख्ती से बुला putExtras क्योंकि उस विधि सरल अगले करने के लिए एक Intent से एक्स्ट्रा कलाकार कहते हैं बिना एक Intent एक और Intent के अंदर भेजने के लिए। मैं इन दो अलग और आसानी से सुलभ रखना चाहता हूं।

उत्तर

1

क्या आप इरादे को पार्स करने के लिए service का उपयोग नहीं कर सकते?

+0

मैं एक सेवा का उपयोग कर रहा हूं, लेकिन इस मामले में सेवा को एक इरादे से बुलाया जाता है, इस मामले में 'mSendingIntent'। मुझे उस इरादे के साथ 'mLaunchIntent' पास करने की आवश्यकता है ताकि क्लिक ईवेंट फिर एक गतिविधि लॉन्च करे। – Tom

1

विभिन्न तरीकों से आप उद्देश्यों/वस्तुओं को स्रोत से गंतव्य तक पारित कर सकते हैं और इसके विपरीत। बंडलों या एक्स्ट्रा का उपयोग किए बिना इसे करने का एक तरीका वेरिएबल (गेटर्स और सेटर्स) के साथ सामान्य वर्ग विधियों का सहारा लेगा। विधियों का उपयोग कर वस्तुओं को पास करें। ऐसा करने का एक और तरीका कक्षा चर का उपयोग होगा। पूर्व:

public class ClassB extends Activity{ 
    public static Object myObject; 
    ... 
} 

public class ClassA extends Activity{ 
    ... 
    @override 
    protected void onCreate(Bundle savedInstanceState){ 
     Object myObject = ClassB.myObject; 
    } 
} 
+0

यह है ... एक समाधान। लेकिन यह कई मुद्दों के कारण मेरे मामले में विफल रहता है। एक के लिए, यदि उपयोगकर्ता अनुक्रम में दो विजेट क्लिक करता है तो क्या होगा। मैं एक वैश्विक चर को संशोधित नहीं करना चाहता हूं या किसी प्रकार की वैश्विक कतार स्थापित करना चाहता हूं। साथ ही, सेवा और ब्रॉडकास्ट रिसीवर विभिन्न थ्रेड पर काम करता है। रेस की स्थिति इसे एक बहुत मुश्किल समाधान बनाती है। – Tom

7

मुझे वास्तव में यह पता चला, समाधान काफी सरल था। mLaunchIntent को Parcelable पर नहीं डाला जाना चाहिए या डेटा खो गया है।

mSendingIntent.putExtra(Intent.EXTRA_INTENT, mLaunchIntent); 

सब है कि मैं एक और Intent के माध्यम से एक Intent भेजने के लिए की जरूरत था।

+0

क्या यह वास्तव में काम करता है? क्या आपने इसका परीक्षण किया है? –

+0

'Widget.EXTRA_INTENT' – GreenRobo

+0

के बजाय' Intent.EXTRA_INTENT' होना चाहिए, कृपया आप बता सकते हैं कि इरादे को कैसे प्राप्त किया जाए और इरादे की वस्तु को कैसे पास किया जाए – JSONParser

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