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
Post a Comment