Как программно установить APK из службы

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/" + "app.apk")), "application/vnd.android.package-archive");
startActivity(intent); 

Это было найдено здесь: Вопрос [4967669] android-install-apk-programmatically

Используя Service для Android, я получаю следующее сообщение об ошибке:

05-03 08:24:14.559: E/AndroidRuntime(21288): НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: Thread-1706 05-03 08:24:14.559: E/AndroidRuntime(21288): android.util.AndroidRuntimeException: вызов startActivity() извне контекста действия требуется флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, что вы хотите?

Я добавил FLAG_ACTIVITY_NEW_TASK:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Но сейчас ничего не происходит. Нет ошибки, но и нет попытки установить apk. Я думаю, это может быть потому, что у него нет активности (поскольку это сервис)?

ВОПРОС Можно ли установить APK через фоновую службу Android? (если да) кто-нибудь знает, как мне это сделать?

Заранее спасибо

PS: Насколько я понимаю, сервисы очень похожи на действия, поэтому не знаю, почему это не сработает.


person Jake Graham Arnold    schedule 03.05.2013    source источник
comment
stackoverflow.com/questions/4604239/. Проверьте принятый ответ по ссылке   -  person Raghunandan    schedule 03.05.2013
comment
Можете ли вы помочь мне, по какой ссылке или ресурсам вы воспользовались помощью? Я новичок и сталкиваюсь с трудностями для достижения той же цели.   -  person nida    schedule 16.01.2014


Ответы (1)


Вы можете установить APK из фонового сервиса. Попробуйте использовать Uri.parse вместо Uri.fromFile

        File apkfile = new File(Environment.getExternalStorageDirectory() +
                  "/download/" + "app.apk");
        if (!apkfile.exists()) {
            return;
        }
        Intent installIntent = new Intent(Intent.ACTION_VIEW);
        installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        installIntent.setDataAndType(
                Uri.parse("file://" + apkfile.toString()),
                "application/vnd.android.package-archive");
        startActivity(installIntent);
person buptcoder    schedule 03.05.2013
comment
он работает из службы. Мой APK был на самом деле поврежден и показывал сообщение об анализе, которое было скрыто действием. Спасибо. - person Jake Graham Arnold; 03.05.2013