简单的完成了下
This commit is contained in:
parent
87e3b5c745
commit
fb76859f71
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user