Я создаю приложение для пользовательского обновления, я нашел много помощи отсюда, но не для этого вопроса.Обновление программного обеспечения, запуск apk, FATAL EXCEPTION: активность не найдена для обработки намерения (Работа с префиксным файлом: //), проблема с использованием getExternalFilesDir
можно скачать update.apk используя AsyncTask так:
output = new FileOutputStream(context.getFilesDir()+"/update.apk");
Скачать завершает успешно, то попробуйте запустить APK для обновления программного обеспечения, как это:
EDIT: Эта часть корректируют Лиги предложил. ("файл: //")
Intent promptInstall = new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.parse("file://"+context.getFilesDir()+"/update.apk"),
"application/vnd.android.package-archive");
promptInstall.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
promptInstall.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(promptInstall);
App разбился с ошибкой выше, перед тем добавлен префикс.
FATAL EXCEPTION: main
android.content.ActivityNotFoundException:
No Activity found to handle Intent {
act=android.intent.action.VIEW dat=/data/data/com.my.app/files/update.apk
typ=application/vnd.android.package-archive flg=0x10000001
}
EDIT:
Как было предложено, я пытаюсь сделать это так и получаю ошибку:
/strorage/emulated/0/Android/data/com.my.app/файлы Не удалось открыть: EISDIR
String PATH = context.getExternalFilesDir(null) + "/";
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, "update.apk");
output = new FileOutputStream(file);
И попытаться начать установку, как предложено
File file = new File(context.getExternalFilesDir(null) + "/update.apk");
file.setReadable(true, false);
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
promptInstall.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
promptInstall.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(promptInstall);
Что я делаю неправильно?
EDIT: РЕШЕНИЕ
Я забыл добавить разрешение на чтение из внешнего хранилища, добавили эту строку в
AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
AsyncTask
@Override
protected String doInBackground (String...sUrl){
......
File sd = Environment.getExternalStorageDirectory();
File outputFile = new File(sd, "/download/update.apk");
output = new FileOutputStream(outputFile);
......
}
@Override
protected void onPostExecute(String result) {
......
File sd = Environment.getExternalStorageDirectory();
File inputFile = new File(sd, "/download/update.apk");
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.fromFile(inputFile), "application/vnd.android.package-archive");
promptInstall.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
promptInstall.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(promptInstall);
......
}
Ваша деятельность хорошо известна в манифесте? – arodriguezdonaire
Деятельность хорошо декларирована в манифесте, да. – EspeH