به روز رسانی اپلیکشن در صورت وجود نسخه جدید.
سلام.دوستان در مورد به روز رسانی اپلیکشن کسی اگر کدی داره ممنون میشم بذاره.چه طوری میتونم اپلیکشنمو به روز رسانی کنمالبته در صورت وجود نسخه جدید..و کسی که قبلا اپلیکیشن رو نصب کرده در صورت وجود نسخه جدید کل اپلیکیشن دوباره دانلود نشه.فقط بخش به روز شده رو بتونه دانلود کنه.ممنون میشم کامل راهنماییم کنید.


کد کامل بروزرسانی خودکار از داخل Application
ابتدا دو کلاس زیر را ایجاد کنید ، سپس دو url باید به این کد بدید ، یک فایل php که یک JSON هست و فیلدی داره که ورژن کد آپدیت جدید رو مشخص می کنه و دیگری مسیر APK ورژن جدید ، و به اینصورت عمل می کنه که اگه ورژن کد در url از ورژن کد برنامه موجود و در حال اجرا بزرگتر بود یک notification میاد و درصد دانلود رو هم نشون میده که بعد از اتمام دانلود خودکار پیغامی به کاربر جهت نصب نشون می ده.
public class AutoUpdate { public static NotificationManager mNotifyManager; public static int id = 1; public static void Update(String apkurl) { try { mNotifyManager = (NotificationManager) G.context .getSystemService(G.context.NOTIFICATION_SERVICE); Builder mBuilder = new NotificationCompat.Builder(G.context); mBuilder.setContentTitle("your title").setContentText("your Content"); mBuilder.setProgress(100, 0, false); mBuilder.setSmallIcon(R.drawable.logoupdate); mBuilder.setOngoing(true); mNotifyManager.notify(id, mBuilder.build()); URL url = new URL(apkurl); HttpURLConnection c = (HttpURLConnection) url.openConnection(); c.setRequestMethod("GET"); //اگر از POST استفاده می کنید این قسمت فعال شود // c.setDoOutput(true); c.connect(); int lenghtOfFile = c.getContentLength(); String PATH = Environment.getExternalStorageDirectory() + "/download/"; File file = new File(PATH); file.mkdirs(); File outputFile = new File(file, "app.apk"); FileOutputStream fos = new FileOutputStream(outputFile); InputStream is = c.getInputStream(); byte[] buffer = new byte[1024]; int len1 = 0; int total = 0; Log.i("updateTrace", "before While"); while ((len1 = is.read(buffer)) != -1) { fos.write(buffer, 0, len1); total += len1; mBuilder.setProgress(100, (total * 100) / lenghtOfFile, false); mBuilder.setContentText("درحال دریافت نسخه جدید برنامه " + (total * 100) / lenghtOfFile + " % "); mNotifyManager.notify(id, mBuilder.build()); Log.i("updateTrace", "build"); } fos.close(); is.close(); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType( Uri.fromFile(new File(Environment .getExternalStorageDirectory() + "/download/" + "app.apk")), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); G.context.startActivity(intent); canelUpdate(); } catch (IOException e) { canelUpdate(); e.printStackTrace(); } } public static void canelUpdate() { if (mNotifyManager != null) { mNotifyManager.cancel(id); } } }
public class CheckUpdate { public CheckUpdate() { HttpResponse response; try { HttpClient client = new DefaultHttpClient(); HttpGet method = new HttpGet( "URL VerCode.php"); response = client.execute(method); InputStream stream = response.getEntity().getContent(); String result = inputstreamToString(stream); JSONObject object = new JSONObject(result); String state = object.getString("code"); PackageInfo pInfo = G.context.getPackageManager().getPackageInfo( G.context.getPackageName(), 0); String version = pInfo.versionName; int verCode = pInfo.versionCode; int verUpdate = Integer.parseInt(state.toString()); Log.i("updateTrace", "verCode : " + verCode + " verUpdate : " + verUpdate); if (verUpdate > verCode) { if (NetworkHelper.checkNetwork(G.context)) { new UpdateApk().execute(); G.ToastMakerLong("درحال دریافت نسخه جدید برنامه..."); } } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } private static String inputstreamToString(InputStream inputStream) { BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); StringBuilder builder = new StringBuilder(); try { String line; while ((line = reader.readLine()) != null) { builder.append(line); } return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } private class UpdateApk extends AsyncTask { @Override protected Object doInBackground(Object... arg0) { try { Log.i("updateTrace", "Called AutoUpdate"); AutoUpdate .Update("URL"); } catch (Exception e) { } return null; } } }
permissions:
<uses-permission android:name="android.permission.INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
در نهایت در هر اکتیویتی که خواستید آپدیت چک و انجام بشه کد زیر رو بنویسید:
CheckUpdate check = new CheckUpdate();

HttpGet method = new HttpGet("URL VerCode.php");
این بخش از کد شما چه کاری انجام میدهد؟ورودی تایع چیه؟
و یه سوال دیگه:
اگر ما بخواهیم فرآیند به روز رسانی رو از طریق FTP Server انجام بدیم باید چه جوری کد بنویسیم؟
تشکر.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .