2010-06-17 10 views
5

I`am डाउनलोड करने और कुछ लिंक से एक apk स्थापित करने के लिए कोशिश कर रहा से apk स्थापित करें,डाउनलोड और एक लिंक

लेकिन किसी कारण से मैं एक अपवाद मिलता है।

मैं एक विधि DownloadFile है() जो फ़ाइल और एक कॉल

को

और installFile() विधि है, जो डिवाइस में इसे स्थापित करने की अपेक्षा की डाउनलोड करने।

कुछ कोड:

public void downloadFile() 
{ 
    String fileName = "someApplication.apk"; 
    MsgProxyLogger.debug(TAG, "TAG:Starting to download"); 
    try 
    { 

     URL u = new URL(
       "http://10.122.233.22/test/someApplication.apk"); 

     try 
     { 
      HttpURLConnection c = (HttpURLConnection) u.openConnection(); 

      try 
      { 
       c.setRequestMethod("GET"); 
       c.setDoOutput(true); 

       try 
       { 
        c.connect(); 


        FileOutputStream f = context.openFileOutput(fileName, 
          context.MODE_WORLD_READABLE); 

        try 
        { 
         InputStream in = c.getInputStream(); 

         byte[] buffer = new byte[1024]; 
         int len1 = 0; 
         int totsize = 0; 
         try 
         { 
          while ((len1 = in.read(buffer)) > 0) 
          { 
           totsize += len1; 
           f.write(buffer, 0, len1);// .write(buffer); 
          } 
         } catch (IOException e) 
         { 
          e.printStackTrace(); 
         } 
         f.close(); 
         MsgProxyLogger.debug(TAG, TAG 
           + ":Saved file with name: " + fileName); 

            InstallFile(fileName); 


        } catch (IOException e) 
        { 
         e.printStackTrace(); 
        } 

       } catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 

      } catch (ProtocolException e) 
      { 
       e.printStackTrace(); 
      } 
     } catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

    } catch (MalformedURLException e) 
    { 
     e.printStackTrace(); 
    } 
} 

और यह वह जगह है फ़ाइल को स्थापित विधि:

private void InstallFile(String fileName) 
{ 
    MsgProxyLogger.debug(TAG, TAG + ":Installing file " + fileName); 

    String src = String.format(
      "file:///data/data/com.test/files/", 
      fileName); 

    Uri mPackageURI = Uri.parse(src); 
    PackageManager pm = context.getPackageManager(); 

    int installFlags = 0; 
    try 
    { 
     PackageInfo pi = pm.getPackageInfo("com.mirs.agentcore.msgproxy", 
       PackageManager.GET_UNINSTALLED_PACKAGES); 
     if (pi != null) 
     { 
      MsgProxyLogger.debug(TAG, TAG + ":replacing " + fileName); 

      installFlags |= PackageManager.REPLACE_EXISTING_PACKAGE; 
     } 
    } catch (NameNotFoundException e) 
    { 
    } 

    try 
    { 
     // PackageInstallObserver observer = new PackageInstallObserver(); 
     pm.installPackage(mPackageURI); 
    } catch (SecurityException e) 
    { 
         //!!!!!!!!!!!!!here i get an security exception!!!!!!!!!!! 
     MsgProxyLogger.debug(TAG, TAG + ":not permission? " + fileName); 
    } 

इस अपवाद विवरण है: "न तो उपयोगकर्ता 10057 और न ही मौजूदा प्रक्रिया android.permission.INSTALL_PACKAGES है" ।

और मैंने अपने मुख्य ऐप में सेट किया है जो मैनिफेस्ट में अनुमति देता है।

किसी को भी कोई विचार है?

धन्यवाद,

किरण। कि इस प्रणाली फर्मवेयर ऐसा कर सकते हैं का हिस्सा हैं केवल अनुप्रयोगों -

+0

आपका कोड बहुत बेकार है, ऐसे कई अपवादों को पकड़ने की कोई आवश्यकता नहीं है, उन्हें केवल असाधारण मामलों में उपयोग किया जाना चाहिए –

उत्तर

6

आप APK की कि जिस तरह से स्थापित नहीं कर सकता की जरूरत है।

आप application/vnd.android.package-archive की एक MIME प्रकार और अपनी फ़ाइल के Uri इशारा, एक ACTION_VIEWIntent उपयोग करने के लिए सक्षम होना चाहिए। ध्यान दें कि यह उन डिवाइसों पर काम नहीं कर सकता है जिनके पास "गैर-बाज़ार इंस्टॉल" की अनुमति नहीं है।

+0

क्या डाउनलोड और बचत भी गलत है? क्या SDDARD पर फ़ाइल को सहेजने का कोई तरीका नहीं है? या mybe कुछ सहेजने, स्थापित करने, हटाने की तरह कुछ करते हैं? क्या आप इस समाधान के कुछ उदाहरण पिछले कर सकते हैं? धन्यवाद। – rayman

+0

Ive ऐसा करने में कामयाब रहा, धन्यवाद! लेकिन सामान्य प्रश्न: मेरे प्रश्न में कौन सी पंक्ति में मैं coudlnt उपयोग नहीं करता (जब तक कि ऐप फर्मवेयर में न हो)? – rayman

+0

@rayman: आप 'installPackage() 'को कॉल नहीं कर सकते हैं। लेकिन आप पहले से ही जानते थे, क्योंकि वह जगह है जहां आपका 'सुरक्षा अपवाद' था, इसलिए मुझे लगता है कि मैं आपके अनुवर्ती प्रश्न को समझ नहीं पाया। – CommonsWare

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