2013-05-15 10 views
16

मैं अपने ऐप के लिए ऐप अपडेटर लिख रहा हूं।एंड्रॉइड प्रोग्रामेटिक रूप से एपीके अपडेट करें और इंस्टॉलेशन का परिणाम देखें

Intent promptInstall = new Intent(Intent.ACTION_VIEW); 
File f = new File(apkLocation);  
promptInstall.setDataAndType(Uri.fromFile(f), "application/vnd.android.package-archive"); 
_context.startActivity(promptInstall); 

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

एक तरफ ध्यान दें, जब मैं मैन्युअल रूप से इसे वापस खोलता हूं तो ऐप वास्तव में अपडेट किया जाता है। मैं इंस्टॉलर को उम्मीद के अनुसार कैसे जा सकता हूं? इरादे पर सेट करने के लिए कुछ भी है?

यह लिखते समय, मुझे आश्चर्य है कि ऐसा होने का कारण यह है कि वर्तमान ऐप बस डिवाइस पर अधिलेखित है और इस प्रकार इसे बंद कर रहा है और हद तक इस उद्देश्य का नतीजा नहीं मिला क्योंकि इसका स्रोत मारे गए थे?

+5

आप (शायद ठीक खाता है कि गूगल अब विशेष रूप से उनके नियमों और शर्तों को आप play स्टोर से डाउनलोड किए गए एप्लिकेशन के लिए ऐसा नहीं कर सकते में कहा गया है में रखना चाहिए अमेज़ॅन इत्यादि के साथ। लेकिन कुछ ध्यान में रखना) – jcw

+0

धन्यवाद, मुझे पता था कि, इसे यहां SW पर पढ़ें। यह मेरा मामला नहीं है। –

उत्तर

14

आप जो भी कर सकते हैं वह android.intent.action.PACKAGE_INSTALL या android.intent.action.PACKAGE_REPLACED जैसे इरादे फ़िल्टर के साथ एक रिसीवर पंजीकृत कर सकता है जिससे आप अपने एप्लिकेशन को दोबारा शुरू कर सकते हैं।

<receiver android:enabled="true" android:exported="true" android:label="BootService" android:name="com.project.services.BootService"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      <data android:scheme="package"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_ADDED"/> 
      <data android:scheme="package"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_INSTALL"/> 
      <data android:scheme="package"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_CHANGED"/> 
      <data android:scheme="package"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_REPLACED"/> 
      <data android:scheme="package"/> 
     </intent-filter> 
    </receiver> 
</application> 

और

public class BootService extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

    if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) { 
     Intent serviceIntent = new Intent(); 
     serviceIntent.setClass(context,Controller.class); 
     serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(serviceIntent); 
    } else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) { 
     Intent serviceIntent = new Intent(); 
     serviceIntent.setClass(context, Controller.class); 
     serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(serviceIntent); 
    } 
    } 
} 
+0

क्या आपने पुष्टि की है कि यह काम कर रहा है? – 323go

+4

मैंने कोशिश की और यह पूरी तरह से काम करता है। मैंने अभी जोड़ा 'if (context.getAplicationInfo()। PackageName.equals ((intent.getData())।getSchemeSpecificPart())) 'यह सुनिश्चित करने के लिए जांचें कि मैंने सही प्रसारण पकड़ा है। इसके बिना, मेरा ऐप स्टोर के भीतर कोई ऐप अपडेट करने के बाद शुरू होगा। –

+0

यह सुनकर खुशी हुई कि इससे आपको – Bishwash

1

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

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

एक चल रहे ऐप को अपडेट करने और इसे चालू रखने के लिए, आपको इंस्टॉलेशन की निगरानी करने और अपने ऐप को पुनरारंभ करने के लिए एक अलग प्रक्रिया (ऐप) की आवश्यकता होगी।

+0

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

+0

मैंने अभी @ बिश्वाश कोड का प्रयास किया है और यह बहुत अच्छा काम करता है इसलिए मुझे लगता है कि यह वास्तव में PACKAGE_REPLACED प्रसारण प्राप्त करना संभव है। आपकी सहायता के लिए धन्यवाद. –

+0

अच्छा सौदा, यह अच्छी खबर है। – 323go

2

सफलतापूर्वक आप यूआरआई नया कार्य के रूप में अपने अद्यतन अनुप्रयोग के लिए यह दर्शाता है के साथ आशय शुरू करने की जरूरत है अद्यतन करने के लिए।

final Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(PATH_TO_APK)); 
"application/vnd.android.package-archive"); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

मेरे नीचे पोस्ट:

Android application update issue

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