11package com .hjq .http .demo ;
22
3+ import android .content .Context ;
4+ import android .content .Intent ;
5+ import android .graphics .Bitmap ;
6+ import android .graphics .drawable .BitmapDrawable ;
7+ import android .graphics .drawable .Drawable ;
8+ import android .net .Uri ;
9+ import android .os .Build ;
310import android .os .Bundle ;
411import android .os .Environment ;
12+ import android .support .v4 .content .ContextCompat ;
13+ import android .support .v4 .content .FileProvider ;
514import android .view .View ;
615import android .widget .ProgressBar ;
716
817import com .hjq .http .EasyHttp ;
918import com .hjq .http .demo .http .model .HttpData ;
1019import com .hjq .http .demo .http .request .SearchAuthorApi ;
1120import com .hjq .http .demo .http .request .SearchBlogsApi ;
21+ import com .hjq .http .demo .http .request .UpdateImageApi ;
1222import com .hjq .http .demo .http .response .SearchBean ;
1323import com .hjq .http .listener .OnDownloadListener ;
1424import com .hjq .http .listener .OnHttpListener ;
15- import com .hjq .http .model .DownloadTask ;
25+ import com .hjq .http .model .DownloadInfo ;
1626import com .hjq .http .model .HttpMethod ;
1727import com .hjq .permissions .OnPermission ;
1828import com .hjq .permissions .Permission ;
1929import com .hjq .permissions .XXPermissions ;
2030import com .hjq .toast .ToastUtils ;
2131
32+ import org .json .JSONObject ;
33+
2234import java .io .File ;
35+ import java .io .FileOutputStream ;
36+ import java .io .IOException ;
2337import java .util .List ;
2438
25-
39+ /**
40+ * author : Android 轮子哥
41+ * github : https://github.com/getActivity/EasyHttp
42+ * time : 2019/05/19
43+ * desc : 网络请求示例
44+ */
2645public class MainActivity extends BaseActivity implements View .OnClickListener , OnPermission {
2746
2847 private ProgressBar mProgressBar ;
@@ -36,6 +55,7 @@ protected void onCreate(Bundle savedInstanceState) {
3655
3756 findViewById (R .id .btn_main_get ).setOnClickListener (this );
3857 findViewById (R .id .btn_main_post ).setOnClickListener (this );
58+ findViewById (R .id .btn_main_update ).setOnClickListener (this );
3959 findViewById (R .id .btn_main_download ).setOnClickListener (this );
4060
4161 requestPermission ();
@@ -72,7 +92,7 @@ protected void onRestart() {
7292 super .onRestart ();
7393 if (XXPermissions .isHasPermission (this , Permission .Group .STORAGE )) {
7494 hasPermission (null , true );
75- }else {
95+ } else {
7696 requestPermission ();
7797 }
7898 }
@@ -87,12 +107,14 @@ public void onClick(View v) {
87107 .request (new OnHttpListener <HttpData <SearchBean >>() {
88108
89109 @ Override
90- public void onSucceed (HttpData <SearchBean > data ) {
110+ public void onSucceed (HttpData <SearchBean > result ) {
91111 ToastUtils .show ("请求成功" );
92112 }
93113
94114 @ Override
95- public void onFail (Exception e ) {}
115+ public void onFail (Exception e ) {
116+ ToastUtils .show (e .getMessage ());
117+ }
96118 });
97119 break ;
98120 case R .id .btn_main_post :
@@ -102,42 +124,66 @@ public void onFail(Exception e) {}
102124 .request (new OnHttpListener <HttpData <SearchBean >>() {
103125
104126 @ Override
105- public void onSucceed (HttpData <SearchBean > data ) {
127+ public void onSucceed (HttpData <SearchBean > result ) {
106128 ToastUtils .show ("请求成功" );
107129 }
108130
109131 @ Override
110- public void onFail (Exception e ) {}
132+ public void onFail (Exception e ) {
133+ ToastUtils .show (e .getMessage ());
134+ }
135+ });
136+ break ;
137+ case R .id .btn_main_update :
138+ File file = new File (Environment .getExternalStorageDirectory (), getString (R .string .app_name ) + ".png" );
139+ // 生成图片到本地
140+ drawableToFile (ContextCompat .getDrawable (this , R .mipmap .ic_launcher ), file );
141+
142+ EasyHttp .post (this )
143+ .api (new UpdateImageApi ()
144+ .setImage (file ))
145+ .request (new OnHttpListener <JSONObject >() {
146+
147+ @ Override
148+ public void onSucceed (JSONObject result ) {
149+ ToastUtils .show ("上传成功" );
150+ }
151+
152+ @ Override
153+ public void onFail (Exception e ) {
154+ ToastUtils .show (e .getMessage ());
155+ }
111156 });
112157 break ;
113158 case R .id .btn_main_download :
114159 EasyHttp .download (this )
115160 .method (HttpMethod .GET )
116- .file (new File (Environment .getExternalStorageDirectory (), "手机QQ .apk" ))
117- .url ("https://qd.myapp.com/myapp/qqteam/AndroidQQ/mobileqq_android.apk" )
118- .md5 ( "47CBDF2A2940B7773DD1B63CBCFD86E1 " )
119- //.url("http://dldir1.qq.com/weixin/android/weixin708android1540.apk ")
161+ .file (new File (Environment .getExternalStorageDirectory (), "微信 .apk" ))
162+ // .url("https://qd.myapp.com/myapp/qqteam/AndroidQQ/mobileqq_android.apk")
163+ .url ( "http://dldir1.qq.com/weixin/android/weixin708android1540.apk " )
164+ . md5 ( "2E8BDD7686474A7BC4A51ADC3667CABF " )
120165 .listener (new OnDownloadListener () {
121166
122167 @ Override
123- public void onDownloadStart (DownloadTask task ) {
168+ public void onDownloadStart (DownloadInfo info ) {
124169 mProgressBar .setVisibility (View .VISIBLE );
125- ToastUtils .show ("下载开始:" + task .getFile ().getName ());
170+ ToastUtils .show ("下载开始:" + info .getFile ().getName ());
126171 }
127172
128173 @ Override
129- public void onDownloadProgress (DownloadTask task ) {
130- mProgressBar .setProgress (task . getProgress ());
174+ public void onDownloadProgress (DownloadInfo info ) {
175+ mProgressBar .setProgress (info . getDownloadProgress ());
131176 }
132177
133178 @ Override
134- public void onDownloadComplete (DownloadTask task ) {
179+ public void onDownloadComplete (DownloadInfo info ) {
135180 mProgressBar .setVisibility (View .GONE );
136- ToastUtils .show ("下载完成:" + task .getFile ().getPath ());
181+ ToastUtils .show ("下载完成:" + info .getFile ().getPath ());
182+ installApk (MainActivity .this , info .getFile ());
137183 }
138184
139185 @ Override
140- public void onDownloadError (DownloadTask task , Exception e ) {
186+ public void onDownloadError (DownloadInfo info , Exception e ) {
141187 mProgressBar .setVisibility (View .GONE );
142188 ToastUtils .show ("下载出错:" + e .getMessage ());
143189 }
@@ -148,4 +194,64 @@ public void onDownloadError(DownloadTask task, Exception e) {
148194 break ;
149195 }
150196 }
197+
198+ /**
199+ * 安装 Apk
200+ */
201+ private void installApk (final Context context , final File file ) {
202+ XXPermissions .with (MainActivity .this )
203+ // 安装包权限
204+ .permission (Permission .REQUEST_INSTALL_PACKAGES )
205+ .request (new OnPermission () {
206+ @ Override
207+ public void hasPermission (List <String > granted , boolean isAll ) {
208+ if (isAll ) {
209+ Intent intent = new Intent ();
210+ intent .setAction (Intent .ACTION_VIEW );
211+ Uri uri ;
212+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .N ) {
213+ uri = FileProvider .getUriForFile (context , context .getPackageName () + ".provider" , file );
214+ intent .addFlags (Intent .FLAG_GRANT_READ_URI_PERMISSION | Intent .FLAG_GRANT_WRITE_URI_PERMISSION );
215+ } else {
216+ uri = Uri .fromFile (file );
217+ }
218+
219+ intent .setDataAndType (uri , "application/vnd.android.package-archive" );
220+ intent .addFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
221+ context .startActivity (intent );
222+ }
223+ }
224+
225+ @ Override
226+ public void noPermission (List <String > denied , boolean quick ) {
227+
228+ }
229+ });
230+ }
231+
232+ /**
233+ * 将 Drawable 写入到文件中
234+ */
235+ private void drawableToFile (Drawable drawable , File file ) {
236+ if (drawable == null ) {
237+ return ;
238+ }
239+
240+ try {
241+ if (file .exists ()) {
242+ file .delete ();
243+ }
244+
245+ if (!file .exists ()) {
246+ file .createNewFile ();
247+ }
248+
249+ FileOutputStream out ;
250+ out = new FileOutputStream (file );
251+ ((BitmapDrawable ) drawable ).getBitmap ().compress (Bitmap .CompressFormat .PNG , 100 , out );
252+ out .close ();
253+ } catch (IOException e ) {
254+ e .printStackTrace ();
255+ }
256+ }
151257}
0 commit comments