18

पर हटा दिया गया है मैंने दो activity-alias लागू किया है कि उपयोगकर्ता रनटाइम में सक्षम या अक्षम करने में सक्षम होना चाहिए।गतिविधि-एलियास ऐप अपडेट

<activity-alias 
    android:name=".ui.alias.open_location" 
    android:targetActivity=".ui.activity.location" 
    android:enabled="false"> 

    <intent-filter> 
     <action android:name="android.intent.action.MAIN"/> 
     <category android:name="android.intent.category.LAUNCHER"/> 
    </intent-filter> 
</activity-alias> 

मैं उन्हें शुरुआत में सक्षम होने के लिए नहीं करना चाहते, उन डिवाइस के एप्लिकेशन स्क्रीन ऊपर अव्यवस्थित नहीं है। लेकिन रनटाइम में, उपयोगकर्ता उपनाम को सक्षम करने में सक्षम होना चाहिए। मैं PackageManager के माध्यम से ऐसा:

PackageManager pm = getApplicationContext().getPackageManager(); 
ComponentName componentName = new ComponentName(context, ".ui.alias.open_location"); 
pm.setComponentEnabledSetting(componentName, 
           PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
           PackageManager.DONT_KILL_APP); 

यह शुरुआत में आकर्षण की तरह काम करता है, लेकिन उर्फ ​​फिर से अक्षम हो जाता है, मेरे ऐप की एक अद्यतन स्थापित किया गया है जब। मैं सिस्टम को मैनिफेस्ट द्वारा सक्षम स्थिति को ओवरराइट करने से कैसे रोक सकता हूं? मैं नहीं चाहता कि उपयोगकर्ता शुरुआत में लॉन्चर के साथ फ़्लूट करे और मैं नहीं चाहता कि उपयोगकर्ता अद्यतन के बाद सभी उपनाम शॉर्टकट को फिर से बनाना चाहें।

मुझे लगता है कि मुझे PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER के समान कुछ चाहिए, लेकिन केवल सक्षम स्थिति के लिए।

धन्यवाद!

+0

एक 'स्ट्रिंग' पैरामीटर' वाला एक 'घटक नाम' कन्स्ट्रक्टर नहीं है। क्या आप अपना वास्तविक कोड पोस्ट कर सकते हैं? धन्यवाद –

+0

हां, मैंने अपना पैकेज नाम लिया। ठीक कर दिया। – JacksOnF1re

उत्तर

8

सभी सक्षम या अक्षम घटकों के विन्यास डिवाइस के इस पथ में सहेजा जाता है (0 डिवाइस के पहले उपयोगकर्ता के लिए है) आप केवल एक निहित डिवाइस से) फ़ाइल खींच कर सकते हैं:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<package-restrictions> 
    <pkg name="com.example.myapplication"> 
     <enabled-components> 
      <item name="com.example.myapplication.ActivityAlias" /> 
     </enabled-components> 
    </pkg> 
    <preferred-activities /> 
    <persistent-preferred-activities /> 
    <crossProfile-intent-filters /> 
</package-restrictions> 

आप अनुप्रयोग सक्षम या अक्षम घटकों ही रहते हैं अद्यतन करते हैं, भले ही आप एप्लिकेशन का डेटा साफ़ करें।

एकमात्र मामला जिसमें यह सेटिंग खो जाती है वह तब होता है जब पैकेज का नाम या घटक का नाम बदल जाता है।

मुझे लगता है कि आपकी समस्या घटक नाम (शायद प्रोगार्ड/डेक्सगार्ड की कुछ अजीब कॉन्फ़िगरेशन) के परिवर्तन के कारण है, क्योंकि आप प्ले स्टोर पर किसी भिन्न पैकेज नाम के साथ एक अपडेट अपलोड नहीं कर सकते हैं।

आप एपीके को डीकंपाइल करने का प्रयास कर सकते हैं और यह सत्यापित कर सकते हैं कि घटक का नाम दोनों ऐप में समान है या नहीं।

+0

"शायद प्रोगार्ड/डेक्सगार्ड की कुछ अजीब विन्यास" अच्छी तरह से, यह वास्तव में मामला हो सकता है। मैं इसे सप्ताहांत में देखूंगा। अब तक धन्यवाद, मैं जो कुछ भी ढूंढता हूं, उस पर टिप्पणी करूंगा। – JacksOnF1re

+0

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

1

अपने उपयोगकर्ता को साझा किए गए विकल्पों में से चुनने के विकल्प सहेजें और अद्यतन के बाद उन्हें पुनः लागू करें। इसके लिए आप save in preferences the version number भी कर सकते हैं, ताकि आप जान सकें कि इसे कब लागू किया जाना चाहिए।

जैसा कि आप this उत्तर में देख सकते हैं, यह कहना सुरक्षित है कि इन प्राथमिकताओं को ऐप अपडेट पर रखा जाता है, इस प्रकार शायद आपके मुद्दे के लिए समाधान प्रदान किया जा सकता है।

/data/system/user/0/package-restrictions.xml 

एक्सएमएल का स्वरूप कुछ इस तरह (है:

+0

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

+0

ठीक है, मैं देखता हूं कि आपका क्या मतलब है। क्या यह काम करेगा अगर आपने इसे दूसरी तरफ किया? डिफ़ॉल्ट रूप से इसे सही पर सेट करें और ऐप शुरू होने के बाद उन्हें हटा दें यदि वे उपयोगकर्ता द्वारा सक्षम नहीं हैं? हालांकि आदर्श अनुभव नहीं है ... – Mikel

+0

दुर्भाग्य से नहीं, क्योंकि पहले इंस्टॉल सभी एलियास देखेंगे जब तक वे एप्लिकेशन शुरू नहीं करेंगे और भ्रमित हो जाएंगे। – JacksOnF1re

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