android - Installing Apk without Prompt (Root Access) -


i creating app android tv 's in apk downloads updates , intsalling tried both of cases

   string command;         command = "adb install -r " + filename;         process proc = runtime.getruntime().exec(new string[] { "su", "-c", command });         proc.waitfor(); 

and too:

intent intent = new intent(intent.action_view);           intent.setdataandtype(uri.fromfile(file), "application/vnd.android.package-archive");                 startactivity(intent); 

on first case file downloaded , installing in background after done run commands , restart using receiver not updating app shows old version !!

on second case ask user install or cancel , (users did'nt find mouse or remote) tv don't want show prompt too. !! can please recommends me better option install without clicks may background or foreground not matter . please !!

you need rooted, here's code used on 6.0 this. have not tested on previous or newer versions, , using android private apis may die @ time. also, app force closed if updates itself, you're best off running in second app can restart activity when updated.

applicationmanager.java:

import java.io.file; import java.lang.reflect.invocationtargetexception; import java.lang.reflect.method;  import android.content.context; import android.content.pm.ipackageinstallobserver; import android.content.pm.packagemanager; import android.net.uri; import android.os.remoteexception;  public class applicationmanager {      public final int install_replace_existing = 2;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} on success.      * @hide      */     public static final int install_succeeded = 1;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if package      * installed.      * @hide      */     public static final int install_failed_already_exists = -1;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if package archive      * file invalid.      * @hide      */     public static final int install_failed_invalid_apk = -2;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if uri passed in      * invalid.      * @hide      */     public static final int install_failed_invalid_uri = -3;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if package manager      * service found device didn't have enough storage space install app.      * @hide      */     public static final int install_failed_insufficient_storage = -4;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * package installed same name.      * @hide      */     public static final int install_failed_duplicate_package = -5;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * requested shared user not exist.      * @hide      */     public static final int install_failed_no_shared_user = -6;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * installed package of same name has different signature      * new package (and old package's data not removed).      * @hide      */     public static final int install_failed_update_incompatible = -7;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package requested shared user installed on      * device , not have matching signature.      * @hide      */     public static final int install_failed_shared_user_incompatible = -8;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package uses shared library not available.      * @hide      */     public static final int install_failed_missing_shared_library = -9;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package uses shared library not available.      * @hide      */     public static final int install_failed_replace_couldnt_delete = -10;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package failed while optimizing , validating dex files,      * either because there not enough storage or validation failed.      * @hide      */     public static final int install_failed_dexopt = -11;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package failed because current sdk version older      * required package.      * @hide      */     public static final int install_failed_older_sdk = -12;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package failed because contains content provider      * same authority provider installed in system.      * @hide      */     public static final int install_failed_conflicting_provider = -13;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package failed because current sdk version newer      * required package.      * @hide      */     public static final int install_failed_newer_sdk = -14;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package failed because has specified test-only      * package , caller has not supplied {@link #install_allow_test}      * flag.      * @hide      */     public static final int install_failed_test_only = -15;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * package being installed contains native code, none      * compatible the device's cpu_abi.      * @hide      */     public static final int install_failed_cpu_abi_incompatible = -16;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package uses feature not available.      * @hide      */     public static final int install_failed_missing_feature = -17;      // ------ errors related sdcard     /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * secure container mount point couldn't accessed on external media.      * @hide      */     public static final int install_failed_container_error = -18;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package couldn't installed in specified install      * location.      * @hide      */     public static final int install_failed_invalid_install_location = -19;      /**      * installation return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)} if      * new package couldn't installed in specified install      * location because media not available.      * @hide      */     public static final int install_failed_media_unavailable = -20;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser given path not file, or not end expected      * '.apk' extension.      * @hide      */     public static final int install_parse_failed_not_apk = -100;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser unable retrieve androidmanifest.xml file.      * @hide      */     public static final int install_parse_failed_bad_manifest = -101;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser encountered unexpected exception.      * @hide      */     public static final int install_parse_failed_unexpected_exception = -102;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser did not find certificates in .apk.      * @hide      */     public static final int install_parse_failed_no_certificates = -103;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser found inconsistent certificates on files in .apk.      * @hide      */     public static final int install_parse_failed_inconsistent_certificates = -104;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser encountered certificateencodingexception in 1 of      * files in .apk.      * @hide      */     public static final int install_parse_failed_certificate_encoding = -105;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser encountered bad or missing package name in manifest.      * @hide      */     public static final int install_parse_failed_bad_package_name = -106;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser encountered bad shared user id name in manifest.      * @hide      */     public static final int install_parse_failed_bad_shared_user_id = -107;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser encountered structural problem in manifest.      * @hide      */     public static final int install_parse_failed_manifest_malformed = -108;      /**      * installation parse return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if parser did not find actionable tags (instrumentation or application)      * in manifest.      * @hide      */     public static final int install_parse_failed_manifest_empty = -109;      /**      * installation failed return code: passed {@link ipackageinstallobserver}      * {@link #installpackage(android.net.uri, ipackageinstallobserver, int)}      * if system failed install package because of system issues.      * @hide      */     public static final int install_failed_internal_error = -110;      private packageinstallobserver observer;     private packagemanager pm;     private method method;      private oninstalledpackaged oninstalledpackaged;      public interface oninstalledpackaged {          public void packageinstalled(string packagename, int returncode);      }     class packageinstallobserver extends ipackageinstallobserver.stub {          public void packageinstalled(string packagename, int returncode) throws remoteexception {             if (oninstalledpackaged != null) {                 oninstalledpackaged.packageinstalled(packagename, returncode);             }         }     }      public applicationmanager(context context) throws securityexception, nosuchmethodexception {          observer = new packageinstallobserver();         pm = context.getpackagemanager();          class<?>[] types = new class[] {uri.class, ipackageinstallobserver.class, int.class, string.class};         method = pm.getclass().getmethod("installpackage", types);     }      public void setoninstalledpackaged(oninstalledpackaged oninstalledpackaged) {         this.oninstalledpackaged = oninstalledpackaged;     }      public void installpackage(string apkfile) throws illegalargumentexception, illegalaccessexception, invocationtargetexception {         installpackage(new file(apkfile));     }      public void installpackage(file apkfile) throws illegalargumentexception, illegalaccessexception, invocationtargetexception {         if (!apkfile.exists()) throw new illegalargumentexception();         uri packageuri = uri.fromfile(apkfile);         installpackage(packageuri);     }      public void installpackage(uri apkfile) throws illegalargumentexception, illegalaccessexception, invocationtargetexception {         method.invoke(pm, new object[] {apkfile, observer, install_replace_existing, null});     }  } 

i believe permission need <uses-permission android:name="android.permission.install_packages" /> hard tell since kiosk mode app installed dozens of permissions because impossible update list properly.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -