بررسی به‌روزبودن برنامه

در ادامه با نحوه‌ی بررسی به‌روزبودن برنامه (توسط به دست آوردن versionCode آخرین نسخه‌ی موجود از برنامه‌ی خود در کافه‌بازار) آشنا خواهید شد.

پکیجی با اسم com.farsitel.bazaar در پروژهٔ خود ایجاد کنید و فایل IUpdateCheckService.aidl را در آن کپی کنید. پس از انجام این کار ساختار پوشه‌بندی پروژه‌ی شما در eclipse باید شبیه تصویر زیر باشد:

ساحتار پروژه در اکلیپس

فرض کنید می‌خواهید versionCode برنامه‌ی خود را داخل Activityای به نام UpdateCheckActivity از برنامه‌ی بازار بپرسید. برای ایجاد ارتباط بین سرویس بازار و برنامه‌ی خود، یک کلاس درونی به نام UpdateServiceConnection که کلاس ServiceConnection اندروید را پیاده‌سازی می‌کند را ایجاد کنید. UpdateServiceConnection شامل متدهای onServiceConnected و onServiceDiconnected خواهد بود. این متدها callbackهایی هستند که پیاده‌سازی Stub سرویس بازار را هنگام اتصال می‌گیرند. در این‌جا نیاز دارید که نوع آن را از Stub به پیاده‌سازی سرویس Aidl تغییر دهید (Type cast). کد زیر در متد onServiceConnected:

IUpdateCheckService.Stub.asInterface((IBinder) boundService);

 این کد اشاره‌گر سرویسی برای دسترسی به داده‌ها و متدها را در اختیار شما قرار خواهد داد. 

کد کامل مربوط به  UpdateCheckActivity در زیر آمده است:

public class MainActivity extends Activity {

	IUpdateCheckService service;
	UpdateServiceConnection connection;
	private static final String TAG = "UpdateCheck";

	class UpdateServiceConnection implements ServiceConnection {
		public void onServiceConnected(ComponentName name, IBinder boundService) {
			service = IUpdateCheckService.Stub
					.asInterface((IBinder) boundService);
			try {
				long vCode = service.getVersionCode("your.app.packagename");
				Toast.makeText(MainActivity.this, "Version Code:" + vCode,
						Toast.LENGTH_LONG).show();
			} catch (Exception e) {
				e.printStackTrace();
			}
			Log.e(TAG, "onServiceConnected(): Connected");
		}

		public void onServiceDisconnected(ComponentName name) {
			service = null;
			Log.e(TAG, "onServiceDisconnected(): Disconnected");
		}
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		initService();
                ...
	}

	private void initService() {
		Log.i(TAG, "initService()");
		connection = new UpdateServiceConnection();
		Intent i = new Intent(
				"com.farsitel.bazaar.service.UpdateCheckService.BIND");
		i.setPackage("com.farsitel.bazaar");
		boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE);
		Log.e(TAG, "initService() bound value: " + ret);
	}

	/** This is our function to un-binds this activity from our service. */
	private void releaseService() {
		unbindService(connection);
		connection = null;
		Log.d(TAG, "releaseService(): unbound.");
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		releaseService();
	}
}

خط زیر در کد بالا:

long vCode = service.getVersionCode("your.app.packagename");

versionCode برنامه شما را در صورتی که به‌روزرسانی برای آن وجود داشته باشد (versionCode برنامه موجود در بازار از versionCode برنامه‌ای که بر روی گوشی کاربر نصب است، بزرگتر باشد)، برمی‌گرداند و در غیر این صورت مقدار ۱- را بر می‌گرداند. بسته به این که کاربر از چه نسخه‌ای استفاده می‌کند و نسخه موجود در بازار چیست می‌توانید تصمیم‌های متفاوتی بگیرید. برای مثال می‌توانید به کاربر پیغام به‌روزرسانی بدهید و در صورت توافق، وی را به صفحه برنامه‌تان در کافه‌بازار ارجاع دهید تا بتواند آخرین نسخه برنامه‌تان را بگیرد. 

متد initService در کد بالا متدی است که اتصال با بازار را برقرار می‌کند و از متد onCreate مربوط به UpdateCheckActivity فراخوانی می‌شود.