android - Unable to download .apk file from async task -
i trying download apk url inside async task not working , .apk not or partially downloading here, don't know why. progress bar dialog doesn't show progress , stuck @ 0. please me solve issue.
thank in advance!
here code :
public class mainactivity extends appcompatactivity implements view.onclicklistener{ interstitialad minterstitialad; progressdialog pdialog; private button downloadbutton; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); pdialog = new progressdialog(this); downloadbutton = (button) findviewbyid(r.id.button_download); downloadbutton.setonclicklistener(this); minterstitialad = new interstitialad(this); minterstitialad.setadunitid(getstring(r.string.interstitial_full_screen)); adrequest adrequest = new adrequest.builder().build(); minterstitialad.loadad(adrequest); minterstitialad.setadlistener(new adlistener() { public void onadloaded() { showinterstitial(); } }); } private void showinterstitial() { if (minterstitialad.isloaded()) { minterstitialad.show(); } } @override public void onclick(view v) { switch (v.getid()){ case r.id.button_download: downloadandinstall downloadandinstall = new downloadandinstall(); downloadandinstall.execute("http://cygnus.androidapksfree.com/hulk/com.viber.voip_v6.0.2.22-226_android-4.0.apk"); break; } } class downloadandinstall extends asynctask<string, string, string> { @override protected void onpreexecute() { super.onpreexecute(); pdialog.setmessage("downloading app"); pdialog.setprogressstyle(progressdialog.style_horizontal); pdialog.setindeterminate(true); pdialog.setprogress(0); pdialog.show(); } @override protected string doinbackground(string... urlarr) { int count; try { log.d("url","url = "+urlarr[0]); url url = new url(urlarr[0]); urlconnection urlconnection = url.openconnection(); urlconnection.connect(); int filesize = urlconnection.getcontentlength(); file sdcard = environment.getexternalstoragedirectory(); inputstream input = new bufferedinputstream(url.openstream(), 8192); outputstream output = new fileoutputstream(sdcard+"/app_file.apk"); byte[] buffer = new byte[1024]; float total = 0; while ((count = input.read(buffer)) != -1) { total += count; publishprogress(""+(int)((total*100)/filesize)); output.write(buffer, 0, count); } output.flush(); output.close(); input.close(); } catch (malformedurlexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } catch (exception e){ e.printstacktrace(); } return null; } @override protected void onprogressupdate(string... progress) { pdialog.setprogress(integer.parseint(progress[0])); } @override protected void onpostexecute(string file_url) { pdialog.dismiss(); } } }
androidmenifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="in.friper.rajeshincorp.abc"> <uses-permission android:name="android.permission.internet" /> <uses-permission android:name="android.permission.access_network_state" /> <uses-permission android:name="android.permission.install_packages" tools:ignore="protectedpermissions"/> <uses-permission android:name="android.permission.write_external_storage" /> <uses-permission android:name="android.permission.read_external_storage" /> <uses-permission android:name="android.permission.write_sync_settings" /> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/apptheme"> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name=".splashactivity" android:configchanges="orientation|keyboardhidden|screensize" android:label="@string/app_name" android:theme="@style/fullscreentheme"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name="com.google.android.gms.ads.adactivity" android:configchanges="keyboard|keyboardhidden|orientation|screenlayout|uimode|screensize|smallestscreensize" android:theme="@android:style/theme.translucent" /> <activity android:name=".mainactivity" android:theme="@style/fullscreentheme"> </activity> </application>
splashactivity.java
public class splashactivity extends appcompatactivity { private static final int my_permissions_request_read_external_storage = 123; private static final int my_permissions_request_write_sync_settings = 345; private static final int my_permissions_request_access_network_state = 567; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_splash); if(contextcompat.checkselfpermission(splashactivity.this, manifest.permission.read_external_storage)!= packagemanager.permission_granted && contextcompat.checkselfpermission(splashactivity.this, manifest.permission.write_sync_settings)!= packagemanager.permission_granted && contextcompat.checkselfpermission(splashactivity.this, manifest.permission.access_network_state)!= packagemanager.permission_granted) { if (activitycompat.shouldshowrequestpermissionrationale(splashactivity.this, manifest.permission.read_external_storage) && activitycompat.shouldshowrequestpermissionrationale(splashactivity.this, manifest.permission.write_sync_settings) && activitycompat.shouldshowrequestpermissionrationale(splashactivity.this, manifest.permission.access_network_state)) { // show explanation user *asynchronously* -- don't block // thread waiting user's response! after user // sees explanation, try again request permission. } else { // no explanation needed, can request permission. activitycompat.requestpermissions(splashactivity.this, new string[]{manifest.permission.read_external_storage}, my_permissions_request_read_external_storage); activitycompat.requestpermissions(splashactivity.this, new string[]{manifest.permission.write_sync_settings}, my_permissions_request_write_sync_settings); activitycompat.requestpermissions(splashactivity.this, new string[]{manifest.permission.access_network_state}, my_permissions_request_access_network_state); } } gotonextactivity(); } @override public void onrequestpermissionsresult(int requestcode, string permissions[], int[] grantresults) { switch (requestcode) { case my_permissions_request_read_external_storage: { if (grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted) { // permission granted } else { // permission denied } return; } case my_permissions_request_write_sync_settings: { if (grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted) { // permission granted } else { // permission denied } return; } case my_permissions_request_access_network_state: { if (grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted) { // permission granted } else { // permission denied } return; } } } public void gotonextactivity(){ intent i= new intent(this,mainactivity.class); startactivity(i); finish(); } }
the above code works fine after fix toast called wrong thread.
percent seemed stuck on 0 because of large size of apk.
Comments
Post a Comment