9

मूल रूप से मेरे AndroidManifest.xml में एक गतिविधि शामिल है जिसे मैं अपने कस्टम एक्शन नाम के माध्यम से पहुंचा।AndroidManifest में किसी इरादे फ़िल्टर के एक्शन नामों के लिए स्ट्रिंग संदर्भों को स्ट्रिंग नहीं करना चाहिए?

<activity 
android:label="HERE I AM" 
android:name="TestController"> 
<intent-filter> 
    <action android:name="com.company.project.TestActivity" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 
</activity> 

इस मेनिफेस्ट के साथ startActivity(new Intent("com.company.project.TestActivity")); ने बिना किसी समस्या के मेरी गतिविधि शुरू की।

लेकिन मैं इस कोडिंग शैली से संतुष्ट नहीं था। शुरुआती समय में मुझे गंभीर समय से परिभाषित स्ट्रिंग स्थिरांक का उपयोग न करने के लिए कहा गया था क्योंकि यह कम रखरखाव कोड के लिए नेतृत्व करता है। और यह वास्तव में एक अंक है एक बिंदु।

तो सबसे पहले मैं अपने App.java वर्ग (एक मैं के लिए इस्तेमाल किया) में एपी ublic static final String MY_ACTION = "com.company.project.TestActivity"; की घोषणा की और इस नाम लगातार इस तरह के माध्यम से अपने घटक पर पहुंच गया:

startActivity(new Intent(App.MY_ACTION));

यह ज्यादा बेहतर लग रहा था लेकिन मैं अभी भी एक ही स्ट्रिंग के दो उदाहरण बनाए रखना था। http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_name पर एक

पढ़ें ... यह भी एक संसाधन के लिए एक संदर्भ हो सकता है (के रूप में "@ [पैकेज:] के प्रकार: नाम")? या विषय विशेषता (फार्म "में [पैकेज:] [टाइप:] नाम ") जिसमें इस प्रकार का मान होता है।

तो मैं अनुमान लगाया यह इस स्ट्रिंग परिभाषित सिर्फ एक बार के लिए ठीक होगा। मैं अपने strings.xml में <string name="MY_ACTION">com.company.project.TestActivity</string> रख दिया और मेरी अनुप्रयोग संशोधित:

public class App ... 
    public static String MY_ACTION; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     MY_ACTION = getString(R.string.MY_ACTION); 
    ... 

और सब कुछ अभी भी भला था

... जब तक मैंने <action android:name="com.company.project.TestActivity" /> के बजाय <action android:name="@string/MY_ACTION" /> का उपयोग करने के लिए अपना AndroidManifest.xml बदल दिया। इस बदलाव के बाद मेरे सबसे बड़े आश्चर्य के बाद एप्लिकेशन ने मेरे इरादे के लिए गतिविधि नहीं ढूंढने के बारे में शिकायत करते हुए रनटाइम पर तोड़ दिया। स्ट्रिंग संदर्भ शायद सही ढंग से पार्स नहीं किया गया था। :(

शायद समस्या यह है कि आरस्ट्रिंग कॉन्फ़िगर निर्भर है ...? लेकिन हे, मैं ऐसे स्ट्रिंग संदर्भ को चुनने के लिए इतना पागल नहीं हो सकता जिसका मूल्य कॉन्फ़िगरेशन से कॉन्फ़िगरेशन में बदल सकता है! और developer.android.com ने बताया मुझे एक्शन नामों पर संदर्भों का उपयोग करना ठीक है! मैंने एपीआई स्तर 6, 7, अंत 8 में इस व्यवहार का अनुभव किया है। क्या यह एंड्रॉइड सिस्टम में बस एक साधारण बग है? या क्या मैं कुछ गलत समझता हूं?

मैं पूरी तरह से परेशान हूं, कृपया मेरी मदद करें। अग्रिम धन्यवाद।

उत्तर

4

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

http://android.bigresource.com/Track/android-zKGKHraw9/

+0

हाय MarkG, धन्यवाद, मैं यह भी मानना ​​है करने के लिए इस स्थिति है करते हैं। हमें कॉन्फ़िगर आश्रित और स्वतंत्र तारों को अलग करने में सक्षम वयस्कों के रूप में नहीं माना जाता है। :-) मैं आपका जवाब स्वीकार करता हूं। –

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

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