Check If Download Manager Downloaded The File
Solution 1:
To check whether the download manager downloaded the file, you must implements your BroatcastReceiver.
@OverridepublicvoidonReceive(Context context, Intent intent) {
Stringaction= intent.getAction();
if (action.equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
DownloadManager.Queryquery=newDownloadManager.Query();
query.setFilterById(intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0));
DownloadManagermanager= (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Cursorcursor= manager.query(query);
if (cursor.moveToFirst()) {
if (cursor.getCount() > 0) {
intstatus= cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
if (status == DownloadManager.STATUS_SUCCESSFUL) {
Stringfile= cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
// So something here on success
} else {
intmessage= cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON));
// So something here on failed.
}
}
}
}
}
However, I am not sure whether you can install the APK programmatically. For security reason, I don't think you can. For application update, I think you should use google versioning control. When you re-deploy your app using different version number, the users should able to update automatically (unless user turn off at google play). Hope that this will help.
Update
You do not need to call the method that I mention. You just need to declare your broadcast receiver at your manifest xml file and DownloadManager will call at when download complete. The xml look something like below:
<receiverandroid:name=".BroadcastReceiver"android:enabled="true"android:exported="true" ><intent-filter><actionandroid:name="android.intent.action.DOWNLOAD_COMPLETE" /><actionandroid:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED" /></intent-filter></receiver>
Solution 2:
This is relatively an easy method. It worked for me:
You need to add the <receiver>
tag in the manifest file as follows:
<application><receiverandroid:name= "com.example.checkDownloadComplete" <!--adddesiredfullnamehere-->
android:exported="true" >
<intent-filter><actionandroid:name="android.intent.action.DOWNLOAD_COMPLETE" /></intent-filter></receiver></application>
This will register a Broadcast Receiver for an event where your download is completed. This will call the onReceive()
method in your class as soon as download completes. Remember that you need to extend
the BroadcastReceiver class, but not implement
it. I declared a boolean variable as a toggle to check completion of download.
Hence, your Java class will be something like:
publicstaticclasscheckDownloadCompleteextendsBroadcastReceiver{
publicstaticboolean isDownloadComplete= false;
@OverridepublicvoidonReceive(Context context, Intent intent) {
isDownloadComplete = true;
Log.i("Download completed?", String.valueOf(isDownloadComplete));
}
}
To wait until or check whether your download has completed from any other class, use the following simple code in the desired appropriate place:
while(!checkDownloadComplete.isDownloadComplete){
// add necessary code to be executed before completion of download
}
//code after completion of download
But remember that if you need to check it multiple times in your project, then you'll need to reset the value of isDownloadComplete
beforehand.
Post a Comment for "Check If Download Manager Downloaded The File"