Android 在棉花糖上以编程方式安装APK
在我的一个用例中,开始的应用程序会联系服务器并下载同一应用程序的更新 对于下载,我使用的是Android的DownloadManager类。 然后使用下面的代码尝试在Android 在棉花糖上以编程方式安装APK,android,android-intent,apk,android-6.0-marshmallow,Android,Android Intent,Apk,Android 6.0 Marshmallow,在我的一个用例中,开始的应用程序会联系服务器并下载同一应用程序的更新 对于下载,我使用的是Android的DownloadManager类。 然后使用下面的代码尝试在onReceive()中创建应用程序安装程序意图,即在APK成功下载后 @Override public void onReceive(Context context, Intent intent) { //check if the broadcast message is for our Enqueued downloa
onReceive()
中创建应用程序安装程序意图,即在APK成功下载后
@Override
public void onReceive(Context context, Intent intent) {
//check if the broadcast message is for our Enqueued download
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (downloadReference == referenceId) {
try {
Log.v("", "Downloading of the new app version complete");
String filepath = Environment.getExternalStorageDirectory() + "/" +
Environment.DIRECTORY_DOWNLOADS + "/" + mLatestVersionFileName;
//start the installation of the latest version
Uri uri = downloadManager.getUriForDownloadedFile(downloadReference);
//downloadManager.getUriForDownloadedFile(downloadReference)
Uri fileLoc = Uri.fromFile(new File(filepath));
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(uri, "application/vnd.android.package-archive");
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(promptInstall);
} catch (Exception e) {
e.printStackTrace();
}
}
}
该代码适用于棉花糖生产前的设备,用户可以在屏幕上安装APK
这在棉花糖设备上不起作用
我在棉花糖上遇到以下例外情况:
android.content.ActivityNotFoundException:找不到可处理Intent的活动{act=android.Intent.action.VIEW dat=content://downloads/my_downloads/287 typ=application/vnd.android.package-archive flg=0x10000000}
我试过以下几件事:
(com.google.android.PackageInstaller/com.android.PackageInstaller.PackageInstaller.packageinstallectivity)
组件名称作为意图的一部分理想情况下,意图由Android操作系统解决。我想这不是什么大问题,我可能在创建意图时遗漏了一些东西。你能试试这个吗:
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(yourDownloadID);
DownloadManager dm = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
Cursor downloadResult = dm.query(query);
if (downloadResult.moveToFirst()) {
int statusColumnIndex = downloadResult.getColumnIndex(DownloadManager.COLUMN_STATUS);
int status = downloadResult.getInt(statusColumnIndex);
if (status == DownloadManager.STATUS_SUCCESSFUL) {
//download completed successfully
int localFileNameId = downloadResult.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);
String downloadPathFile = downloadResult.getString(localFileNameId);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(downloadPathFile)), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
试试这个
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
long downloadId = intent.getLongExtra(
DownloadManager.EXTRA_DOWNLOAD_ID, 0);
Query query = new Query();
query.setFilterById(enqueue);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c
.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == c
.getInt(columnIndex)) {
ImageView view = (ImageView) findViewById(R.id.imageView1);
String uriString = c
.getString(c
.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
//start the installation of the latest version
Uri uri = Uri.parse(uriString);
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(uri, "application/vnd.android.package-archive");
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(promptInstall);
}
}
}
}
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
long downloadId = intent.getLongExtra(
DownloadManager.EXTRA_DOWNLOAD_ID, 0);
Query query = new Query();
query.setFilterById(enqueue);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c
.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == c
.getInt(columnIndex)) {
ImageView view = (ImageView) findViewById(R.id.imageView1);
String uriString = c
.getString(c
.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
//start the installation of the latest version
Uri uri = Uri.parse(uriString);
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(uri, "application/vnd.android.package-archive");
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(promptInstall);
}
}
}
}