package com.example.song.reactnativeappdemo; import android.app.DownloadManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.Toast; import com.example.song.reactnativeappdemo.constants.FileConstant; import com.example.song.reactnativeappdemo.hotupdate.HotUpdate; import com.example.song.reactnativeappdemo.preloadreact.ReactNativePreLoader; public class MainActivity extends AppCompatActivity { private long mDownLoadId; private CompleteReceiver localReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); registeReceiver(); } @Override protected void onResume() { super.onResume(); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if(hasFocus) { ReactNativePreLoader.preLoad(MainActivity.this,"HotRN"); } } /** * 向RN发送消息 * @param v */ public void sendMsgToRN(View v) { MainApplication.getReactPackage().mModule.nativeCallRn("hello"); } /** * 跳转到RN界面 * @param v */ public void skip(View v) { startActivity(new Intent(this,MyReactActivity.class)); } /** * 下载更新包 * @param v */ public void load(View v) { checkVersion(); } /** * 检查版本号 */ private void checkVersion() { // 默认有最新版本 Toast.makeText(this, "开始下载", Toast.LENGTH_SHORT).show(); downLoadBundle(); } /** * 下载最新Bundle */ private void downLoadBundle() { // 1.下载前检查SD卡是否存在更新包文件夹 HotUpdate.checkPackage(getApplicationContext(),FileConstant.LOCAL_FOLDER); // 2.下载 DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); DownloadManager.Request request = new DownloadManager .Request(Uri.parse(FileConstant.JS_BUNDLE_REMOTE_URL)); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN); request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE| DownloadManager.Request.NETWORK_WIFI); request.setDestinationUri(Uri.parse("file://"+ FileConstant.JS_PATCH_LOCAL_PATH)); mDownLoadId = downloadManager.enqueue(request); } /** * 注册广播 */ private void registeReceiver() { localReceiver = new CompleteReceiver(); registerReceiver(localReceiver,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); } public class CompleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { long completeId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID,-1); if(completeId == mDownLoadId) { HotUpdate.handleZIP(getApplicationContext()); } } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(localReceiver); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: finish(); System.exit(0); break; } return super.onKeyDown(keyCode, event); } }