نسخه چاپی
بررسی وضعیت ورود کاربر
توجه:
این امکان از نسخه ۶.۵ به بعد بازار در دسترس است.
با استفاده از این امکان میتوانید از وضعیت ورود (Login) کاربر به حساب کاربریاش در برنامه بازار مطلع شوید.
برای شروع، پکیجی با نام com.farsitel.bazaar
در پروژهٔ خود ایجاد کرده و فایل ILoginCheckService.aidl را در آن کپی کنید. توجه نمایید ساختار پروژهٔ شما در محیط Android Studio
باید مشابه تصویر زیر باشد:
فرض کنید میخواهید وضعیت Login
کاربر را داخل Activityای به نام LoginCheckActivity
از بازار درخواست کنید. برای ایجاد ارتباط بین سرویس بازار و برنامهٔ خود لازم است، یک کلاس درونی به نام LoginCheckServiceConnection
که کلاس ServiceConnection
اندروید را پیادهسازی میکند، ایجاد کنید.
LoginCheckServiceConnection
شامل متدهای onServiceConnected
و onServiceDiconnected
خواهد بود. این متدها callbackهایی هستند که پیادهسازی Stub سرویس بازار را هنگام اتصال میگیرند. در اینجا نیاز دارید که نوع آن را از Stub
به پیادهسازی سرویس Aidl
تغییر دهید (Type cast). کد زیر در متد onServiceConnected
:
ILoginCheckService.Stub.asInterface((IBinder) boundService);
این کد اشارهگر سرویسی برای دسترسی به دادهها و متدها را در اختیار شما قرار خواهد داد.
کد کامل مربوط به LoginCheckActivity
در زیر آمده است:
public class LoginCheckActivity extends Activity {
ILoginCheckService service;
LoginCheckServiceConnection connection;
private static final String TAG = "LoginCheck";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initService();
}
private void initService() {
Log.i(TAG, "initService()");
connection = new LoginCheckServiceConnection();
Intent i = new Intent(
"com.farsitel.bazaar.service.LoginCheckService.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();
}
public class LoginCheckServiceConnection implements ServiceConnection {
private static final String TAG = "LoginCheck";
public void onServiceConnected(ComponentName name, IBinder boundService) {
service = ILoginCheckService.Stub
.asInterface((IBinder) boundService);
try {
boolean isLoggedIn = service.isLoggedIn();
Toast.makeText(MainActivity.this, "isLoggedIn:" + isLoggedIn,
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");
}
}
}
کلاس داخلی زیر، درخواست شما به بازار را پردازش میکند و جواب را به وسیلهی یک toast
نشان میدهد.
public class LoginCheckServiceConnection implements ServiceConnection {
private static final String TAG = "LoginCheck";
public void onServiceConnected(ComponentName name, IBinder boundService) {
service = ILoginCheckService.Stub
.asInterface((IBinder) boundService);
try {
boolean isLoggedIn = service.isLoggedIn();
Toast.makeText(MainActivity.this, "isLoggedIn:" + isLoggedIn,
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");
}
}
زمانیکه میخواهید وضعیت Login
کاربر را بررسی کنید، باید این سرویس را با استفاده از initService()
، راهاندازی اولیه کنید (مثلا در این مثال، ما این تابع را در onCreate
مربوط به MainActivity
صدا زدیم).
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initService();
...
}
تابع initService
یک LoginCheckServiceConnection
جدید و یک Intent
جدید ساخته و آنها را به هم متصل میکند تا در نهایت به بازار متصل شوند.
private void initService() {
Log.i(TAG, "initService()");
connection = new LoginCheckServiceConnection();
Intent i = new Intent("com.farsitel.bazaar.service.LoginCheckService.BIND");
i.setPackage("com.farsitel.bazaar");
boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE);
Log.e(TAG, "initService() bound value: " + ret);
}
تابع releaseService
به منظور آزاد سازی منابع دستگاه کاربر، آن منابع را آزاد میکند.
private void releaseService() {
unbindService(connection);
connection = null;
Log.d(TAG, "releaseService(): unbound.");
}
وقتیکه کارتان با این سرویس تمام شد باید تابع releaseService()
را صدا بزنید (در این مثال، ما آن را در تابع onDestroy
مربوط به MainActivity
صدا زدیم).
protected void onDestroy() {
super.onDestroy();
releaseService();
...
}
خط زیر در کد بالا وضعیت Login
بودن کاربر را به صورت boolean
برمیگرداند. اگر کاربر وارد حساب کاربریاش شده باشد true و در غیر این صورت false برگرداننده خواهد شد.
boolean isLoggedIn = service.isLoggedIn();
متد initService
در کد بالا اتصال با بازار را برقرار میکند و از متد onCreate
مرتبط با LoginCheckActivity
فراخوانی میشود.
به مطالب ارائه شده چه امتیازی میدهید؟
محل نوشتن دیدگاه ...
اگر در مورد محتوا نظر یا پیشنهادی دارید لطفا برای ما بنویسید.
زمان انتشار: ۱۴۰۰-۰۳-۲۵ ۱۷:۳۲
آخرین بهروزرسانی: ۱۴۰۰-۰۵-۰۹ ۰۹:۴۷