简单的完成了下

This commit is contained in:
Jerry Yan 2020-02-27 18:52:34 +08:00
parent 87e3b5c745
commit fb76859f71
2 changed files with 100 additions and 1 deletions

View File

@ -0,0 +1,44 @@
package top.jerryyan.RN.A.VersionUpgrade;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import java.io.File;
public class DownLoadBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
long currentDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
SharedPreferences sPreferences = context.getSharedPreferences("jerry_rn_a_version_upgrade", 0);
long refernece = sPreferences.getLong("downloadId", 0);
if (currentDownloadId == refernece) {
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Intent install = new Intent(Intent.ACTION_VIEW);
DownloadManager.Query queryById = new DownloadManager.Query();
queryById.setFilterById(currentDownloadId);
Cursor downloadCursor = downloadManager.query(queryById);
String filePath = null;
if(downloadCursor.moveToFirst()){
if(downloadCursor.getInt(downloadCursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL){
int fileNameIdx = downloadCursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);
filePath = downloadCursor.getString(fileNameIdx);
}else{
downloadManager.remove(currentDownloadId);
downloadCursor.close();
return;
}
downloadCursor.close();
}
if(filePath == null) return;
File file = new File(filePath);
install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(install);
}
}
}

View File

@ -1,5 +1,16 @@
package top.jerryyan.RN.A.VersionUpgrade;
import android.app.Activity;
import android.app.DownloadManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
@ -9,10 +20,15 @@ import java.util.Map;
public class UpgradeModule extends ReactContextBaseJavaModule {
private final ReactApplicationContext reactContext;
private String downloadUrl;
private String title = "应用更新中";
private final Activity activity;
public UpgradeModule(ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
this.activity = reactContext.getCurrentActivity();
}
@Override
@ -21,8 +37,47 @@ public class UpgradeModule extends ReactContextBaseJavaModule {
}
@Override
public Map<String, Object> getConstants(){
public Map<String, Object> getConstants() {
final Map<String, Object> constants = new HashMap<>();
return constants;
}
@ReactMethod
public void setDownloadUrl(String downloadUrl) {
this.downloadUrl = downloadUrl;
}
@ReactMethod
public void setTitle(String title) {
this.title = title;
}
private boolean _hasPermissionToInstall() {
return activity != null && (Build.VERSION.SDK_INT < Build.VERSION_CODES.O || activity.getPackageManager().canRequestPackageInstalls());
}
private void _requestInstallPermission() {
if (activity == null) return;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Uri packageURI = Uri.parse("package:" + activity.getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
(activity).startActivityForResult(intent, 2);
}
}
@ReactMethod
public void startDownload() {
if (activity == null) return;
if (!this._hasPermissionToInstall()) this._requestInstallPermission();
DownloadManager downloadManager = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE);
Uri uri = Uri.parse(downloadUrl);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
request.setMimeType("application/vnd.android.package-archive");
request.setTitle(this.title);
request.setDestinationInExternalFilesDir(activity, Environment.DIRECTORY_DOWNLOADS, "");
long downloadId = downloadManager.enqueue(request);
SharedPreferences sharedPreferences = activity.getSharedPreferences("jerry_rn_a_version_upgrade", 0);
sharedPreferences.edit().putLong("downloadId", downloadId).apply();
}
}