Часто возникают ситуации, когда требуется реализовать проверку обновления вашего приложения независимо от Google Play. Обычно магазин приложении Google автоматически проверят обновления программ и предлагает пользователю обновится, но иногда приложения распространяются и без магазинов приложений, тогда на помощь может прийти данный способ.
Следующий код проверяет раз в день наличие обновления (с вашего сервера), и если версия больше текущей, то открывает диалоговое окно с предложением перейти в Google Play.
Следующий код проверяет раз в день наличие обновления (с вашего сервера), и если версия больше текущей, то открывает диалоговое окно с предложением перейти в Google Play.
public class Test extends Activity { private Handler mHandler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.front); mHandler = new Handler(); /* Прочитать последнее время обновления */ SharedPreferences prefs = getPreferences(0); lastUpdateTime = prefs.getLong("lastUpdateTime", 0); /* Нужно обновляться? */ if ((lastUpdateTime + (24 * 60 * 60 * 1000)) < System.currentTimeMillis()) { /* Сохраним для следующего раза */ lastUpdateTime = System.currentTimeMillis(); SharedPreferences.Editor editor = getPreferences(0).edit(); editor.putLong("lastUpdateTime", lastUpdateTime); editor.commit(); /* Обновимся */ checkUpdate.start(); } } /* Этот поток проверяет обновления в фоне */ private Thread checkUpdate = new Thread() { public void run() { try { URL updateURL = new URL("http://my.company.ru/update"); URLConnection conn = updateURL.openConnection(); InputStream is = conn.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(50); int current = 0; while((current = bis.read()) != -1){ baf.append((byte)current); } final String s = new String(baf.toByteArray()); /* Получаем номер версии */ int curVersion = getPackageManager().getPackageInfo("your.app.id", 0).versionCode; int newVersion = Integer.valueOf(s); /* Более новая версия? */ if (newVersion > curVersion) { /* Отправим хэндлеру запрос на показ сообщения */ mHandler.post(showUpdate); } } catch (Exception e) { } } }; /* Открывает диалог */ private Runnable showUpdate = new Runnable(){ public void run(){ new AlertDialog.Builder(Test.this) .setIcon(R.drawable.icon) .setTitle("Update Available") .setMessage("An update for is available!\\n\\nOpen Android Market and see the details?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* Нажали OK */ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:your.app.id")); startActivity(intent); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* Нажали отмену :( */ } }) .show(); } }; }
No comments:
Post a Comment