public class MainActivity extends AppCompatActivity implements NewsView, View.OnClickListener { private List<String> imgList = new ArrayList<>(); private Banner mBanner; private ProgressBar mPb; /** * 下载进度 0% */ private TextView mPrecent; private RecyclerView mRv; /** * 暂停 */ private Button mBt; private int downloadSizes; private Subscription subscribe; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); DownloadStatus downloadStatus = (DownloadStatus) msg.obj; long downloadSize = downloadStatus.getDownloadSize(); long totalSize = downloadStatus.getTotalSize(); String percent = downloadStatus.getPercent(); int t = (int) (downloadSize / (totalSize / 100)); if(downloadSize<=totalSize){ mPb.setProgress(t); mPrecent.setText("下载进度 "+percent); } if(downloadSize == totalSize){ mPb.setProgress(0); mPrecent.setText("下载进度 0%"); } } }; private UserDao userDao; private VideoView vv; private MediaController mediaco; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApp.getContext(), "table", null); DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase()); DaoSession daoSession = daoMaster.newSession(); userDao = daoSession.getUserDao(); NewsPresenter newsPresenter = new NewsPresenter(this, this); newsPresenter.getPresenter(); } private void initView() { mBanner = (Banner) findViewById(R.id.banner); mPb = (ProgressBar) findViewById(R.id.pb); mPrecent = (TextView) findViewById(R.id.precent); mRv = (RecyclerView) findViewById(R.id.rv); mRv.setLayoutManager(new LinearLayoutManager(this)); mRv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); mBt = (Button) findViewById(R.id.bt); mBt.setOnClickListener(this); vv = (VideoView) findViewById(R.id.vv); } @Override public void getNewsView(NewsBean newsBean) { final List<NewsBean.DataBean> data = newsBean.getData(); for (int i = 0; i < data.size(); i++) { String image_url = data.get(i).getImage_url(); imgList.add(image_url); } mBanner.isAutoPlay(true); mBanner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR); mBanner.setImages(imgList); mBanner.setImageLoader(new GlideImageLoader()); mBanner.start(); final MyAdapter myAdapter = new MyAdapter(this, data); mRv.setAdapter(myAdapter); myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void OnItemClick(int position) { final String title = data.get(position).getTitle(); String vedio_url = data.get(position).getVedio_url(); subscribe = RxDownload.getInstance() .maxThread(5) .maxRetryCount(10) .download(vedio_url, title + ".mp4", null) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<DownloadStatus>() { @Override public void onCompleted() { final File file = new File("/mnt/sdcard/Download/"+title+".mp4"); mediaco=new MediaController(MainActivity.this); if(file.exists()){ //VideoView与MediaController进行关联 vv.setVideoPath(file.getAbsolutePath()); vv.setMediaController(mediaco); mediaco.setMediaPlayer(vv); //让VideiView获取焦点 vv.requestFocus(); } } @Override public void onError(Throwable e) { Log.i("tag",e.getMessage()); } @Override public void onNext(DownloadStatus downloadStatus) { downloadSizes = (int) downloadStatus.getDownloadSize(); Message message = new Message(); message.obj = downloadStatus; handler.sendMessageDelayed(message, 100); } }); } @Override public void OnLongItemClick(int position) { User user = new User(null, downloadSizes); userDao.insert(user); int percent = user.getPercent(); int precents = percent / (1000000); Log.i("xxx",precents+"M"); } }); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt: if (subscribe != null && !subscribe.isUnsubscribed()) { subscribe.unsubscribe(); } break; } } }