I'am, пытающийся загружать и устанавливать 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".
и я установил в своем главном приложении что разрешение в декларации.
у кого-либо есть какая-либо идея?
спасибо,
луч.
Вы не можете устанавливать APK таким образом - это могут делать только приложения, которые являются частью системной прошивки.
Вы должны иметь возможность использовать намерение ACTION_VIEW
с MIME-типом application / vnd.android.package-archive
и Uri
] указывая на ваш файл. Обратите внимание, что это может не работать на устройствах, на которых не установлен флажок «Разрешить установку не из Маркета».
Вам нужно добавить это разрешение для манифеста http://developer.android.com/reference/android/Manifest.permission.html