مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

جلسه سوم آموزش اندروید - Service ها در اندروید


یک service مولفه ای است که برای انجام عملیات طولانی مدت ، در پس زمینه (background ) ، بدون نیاز به تعامل با کاربر، اجرا می شود .

 برای مثال ، یک service می تواند در پس زمینه (background ) موسیقی اجرا کند در حالی که کاربر در اپلیکیشن متفاوتی قرار دارد و یا می تواند بدون قطع کردن تعامل کاربر با یک activity ، داده ها را از شبکه واکشی کنند. یک سرویس اساسا می تواند دو حالت داشته باشد:

  • Started :   یک service زمانی که یکی مولفه از اپلیکیشن ، مانند یک activity ، آن را با ()startService فراخوانی کند در حالت Started قرار می گیرد. زمانی که یک service آغاز شد، می تواند به صورت نامحدود در پس زمینه اجرا شود حتی اگر مولفه ای که آن را شروع کرده، از بین برود.
  • Bound : یک service در حالت Bound قرار دارد، زمانی که یک مولفه­ ی اپلیکیشن با فراخوانی ()bindService به آن متصل شود. یک bound service ، یک واسط کلاینت-سرور (client-server ) را ارائه می کند و به مولفه ها اجازه می دهد تا :
    با service ارتباط برقرار کنند
    درخواست های خود را به آن ارسال کنند
    نتایج را دریافت کنند
    حتی این کار ها را در بین فرایند هایی که دارای ارتباط بین فرایندی (IPC ) هستند، انجام دهند .

 

یک سرویس (service ) در چرخه حیات خود دارای متد های callback ای است که شما می توانید برای نظارت بر تغییرات وضعیت سرویس (service ) آن ها را اجرا کنید و می توانید این کار را در زمان و مرحله ای مناسب انجام دهید.

دیاگرام زیر در سمت چپ نشان دهنده ­ی چرخه حیات سیستم در زمانی است که سرویس (service ) به وسیله­ ی ()startService ایجاد می شود.

دیاگرام سمت راست نشان دهنده ­ی چرخه ­ی حیات سیستم در زمانی است که سرویس (service ) به وسیله ­ی ()bindService ایجاد می شود.

 

 

برای ایجاد یک سرویس (service )  شما یک کلاس جاوا را ایجاد می کنید که کلاسِ اصلیِ سرویس یا یکی از زیر کلاس های(subclass) آن را توسعه می دهد.

کلاسِ اصلیِ سرویس (Service) متد های callback مختلفی را تعریف می کند که مهمترین آن ها در موارد زیر ارائه شده است.

شما نیاز ندارید که همه­ ی متد ها را پیاده سازی و اجرا کنید. با این حال، مهم است که شما هر کدام از آن ها را بفهمید و از بین آن ها مواردی که نیازهای اپلیکیشن شما را تامین می کنند، پیاده سازی کنید.

()onStartCommand :

یک سیستم زمانی این متد را فراخوانی می کند که مولفه­ ی دیگری مانند یک activity ، با فراخوانی ()startService درخواست کند که سرویس آغاز شود. در صورتی که شما این متد را پیاده سازی کنید، متوقف کردن سرویس (service) بعد از اتمام کار آن ، به عهده شماست. خاتمه دادن به کار با فراخوانی متد های stopSelf() یا stopService() انجام می شود.

()onBind:

سیستم ، این متد را زمانی فراخوانی می کند که یک مولفه دیگر بخواهد با فراخوانی ()bindService به سرویس متصل شود. در صورت پیاده سازی این متد، شما باید با برگرداندن یک شیء IBinder ، واسطی را ایجاد کنید که کلاینت ، از آن برای برقراری ارتباط با سرویس استفاده کند. باید همیشه این متد را پیاده سازی کنید، ولی در صورتی که نخواهید اجازه ­ی اتصال بدهید، باید null را برگردانید.

()onUnbind :

سیستم این متد را زمانی فراخوانی می کند که اتصال همه ­ی کلاینت ها، از یک واسط خاص منتشر شده به وسیله ­ی سرویس (service) قطع شود. این متد بعد از اینکه سیستم از طریق :

onUnbind(Intent)

متوجه شود که اتصال همه سرویس ها قطع شده است ، اجرا می شود.

()onRebind :

سیستم این متد را زمانی فراخوانی می کند که سرویس برای اولین بار توسط ()StartCommand یا ()onBind ایجاد شود. این فراخوانی یک بار در طول راه اندازی انجام می شود.

()onDestroy :

سیستم این متد را زمانی فراخوانی می کند که سرویس، دیگر مورد استفاده قرار نگیرد و از بین برود. سرویس (service) شما باید این کار را برای پاک کردن تمام منابع مانند thread ، شنود کننده های ثبت شده (registered listeners) ، دریافت کننده ها (receivers) و غیره انجام دهد.

مثال زیر هر کدام از چرخه های زندگی را نشان می دهد:

package com.tutorialspoint;

import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
import android.os.Bundle;

public class HelloService extends Service {
   
   /** indicates how to behave if the service is killed */
   int mStartMode;
   
   /** interface for clients that bind */
   IBinder mBinder;     
   
   /** indicates whether onRebind should be used */
   boolean mAllowRebind;

   /** Called when the service is being created. */
   @Override
   public void onCreate() {
     
   }

   /** The service is starting, due to a call to startService() */
   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
      return mStartMode;
   }

   /** A client is binding to the service with bindService() */
   @Override
   public IBinder onBind(Intent intent) {
      return mBinder;
   }

   /** Called when all clients have unbound with unbindService() */
   @Override
   public boolean onUnbind(Intent intent) {
      return mAllowRebind;
   }

   /** Called when a client is binding to the service with bindService()*/
   @Override
   public void onRebind(Intent intent) {

   }

   /** Called when The service is no longer used and is being destroyed */
   @Override
   public void onDestroy() {

   }
}

 

این مثال، از طریق تعدادی مراحل ساده به شما آموزش می دهد که چگونه سرویس اندرویدی (Android Service) خود را ایجاد کنید. مراحل زیر را برای تغییر اپلیکیشن اندرویدی ای که ما در بخش Hello World Example ایجاد کردیم، دنبال کنید :

1) از Android StudioIDE برای ایجاد یک اپلیکیشن اندرویدی استفاده کنید و آن را تحت پکیج My Application نامگذاری کنید .همان طور که در مثال بخش Hello World Example شرح داده شد ، تحت پکیج Hello World Example، HelloWorld بنامید.

2) فایل activity اصلی MainActivity.java را به متد های  startService() و stopService() تغییر دهید.

3)یک فایل جاوای جدید MyService.java را تحت پکیج com.example.helloworld ایجاد کنید. این فایل شامل پیاده سازی متد های مربوط به سرویس اندرویدی خواهد بود.

4) سرویس خود را با استفاده از تگ <service.../> ، در فایل AndroidManifest.xml تعریف کنید. یک اپلیکیشن بدون هیچ محدودیتی می تواند یک یا تعداد بیشتری سرویس (service) داشته باشد.

5) محتوای پیش فرض فایل res/layout/activity_main.xml را تغییر دهید به طوری که شامل دو دکمه در صفحه بندی خطی (linear layout) باشد.

6) دو ثابت start_service و stop_service را در فایل res/values/strings.xml تعریف کنید. نیاز به تغییر ثابت فایل res/values/strings.xml نیست (اندروید استودیو از مقادیر رشته ای مراقبت می کند)

7) برای راه اندازی امولاتور اندروید ، اپلیکیشن را اجرا کنید و نتایج تغییرات اعمال شده در اپلیکیشن را بررسی نمایید .

 

در بخش زیر محتوای فایل  activity اصلی MainActivity.java نمایش داده شده است. این فایل می تواند شامل هر کدام از متد های چرخه حیات اصلی باشد. ما متد های startService() و stopService() را برای آغاز کردن و توقف سرویس اضافه کرده ایم.

package com.example.tutorialspoint7.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;

public class MainActivity extends Activity {
   String msg = "Android : ";

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Log.d(msg, "The onCreate() event");
   }

   public void startService(View view) {
      startService(new Intent(getBaseContext(), MyService.class));
   }

   // Method to stop the service
   public void stopService(View view) {
      stopService(new Intent(getBaseContext(), MyService.class));
   }
}

 

در بخش زیر ، محتوای فایل MyService.java ارائه شده است. این فایل می تواند، شامل پیاده سازی یک یا تعداد بیشتری سرویسِ مربوط به Service اصلی یا نیازمندی ها باشد. در حال حاضر ما فقط قصد داریم که متد های onStartCommand() و onDestroy() را پیاده سازی کنیم.

 

package com.example.tutorialspoint7.myapplication;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;

/**
   * Created by TutorialsPoint7 on 8/23/2016.
*/

public class MyService extends Service {
   @Nullable
   @Override
   public IBinder onBind(Intent intent) {
      return null;
   }
	
   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
      // Let it continue running until it is stopped.
      Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
      return START_STICKY;
   }

   @Override
   public void onDestroy() {
      super.onDestroy();
      Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
   }
}

 

در بخش زیر محتوای تغییر یافته­ ی فایل AndroidManifest.xml ارائه شده است، در اینجا ما تگ <service.../> را برای وارد کردن سرویس مان اضافه کرده ایم.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint7.myapplication">

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
		
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
		
      <service android:name=".MyService" />
   </application>

</manifest>

 

در زیر ، محتوای فایل res/layout/activity_main.xml برای وارد کردن دو دکمه می بینید :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Example of services"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_above="@+id/imageButton"
      android:layout_centerHorizontal="true"
      android:layout_marginBottom="40dp" />

   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_centerVertical="true"
      android:layout_centerHorizontal="true" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/button2"
      android:text="Start Services"
      android:onClick="startService"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Stop Services"
      android:id="@+id/button"
      android:onClick="stopService"
      android:layout_below="@+id/button2"
      android:layout_alignLeft="@+id/button2"
      android:layout_alignStart="@+id/button2"
      android:layout_alignRight="@+id/button2"
      android:layout_alignEnd="@+id/button2" />

</RelativeLayout>

 

حالا نوبت به آن رسیده که اپلیکیشن تغییر یافته ­ی مثال Hello World! را اجرا کنیم، من فرض می کنم که شما ADV خود را در طول نصب محیط ایجاد کرده باشید. برای اجرای اپلیکیشن از Android studio ، یکی از فایل های activity پروژه ­ی خود را باز کنید و بر روی آیکن Run از نوار ابزار خود کلیک کنید. Android Studio ، اپلیکیش را بر روی AVD شما نصب می کند و آن را راه اندازی می کند ، و در صورتی که همه­ ی موارد مربوط به تنظیمات و برنامه شما درست باشد، در صفحه امولاتور دو دکمه با عناوین start service و stop service ظاهر می شود.

حالا برای استارت زدن  سرویس خود، بر روی دکمه Start Service کلیک کنید، این کار سرویس شما را آغاز می کند و با توجه به کد های برنامه نویسی شده در متد onStartCommand() پیغام Service Started (به معنای سرویس آغاز شد)، در بخش انتهایی امولاتور (یا شبیه ساز) نمایش داده می شود.

فصلِ: 20 , تعداد قسمت ها: 238 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل رایگان مربوط به مفاهیم php و api نویسی …

توضیحات کلی مجموعه: دوره متخصص اندروید کلیک سایت کامل ترین دوره جامع برنامه نویسی اندروید(حتما دمو دوره را ببینید)   چرا دوره متخصص جایگزین دوره صفرتاصد اندروید شد؟ کلیک سایت تصمیم گرفت …
فصلِ: 30 , تعداد قسمت ها: 182 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت اپلیکیشن علی بابا-آموزش کالبک ها-…

دوره "متخصص" جایگزین دوره صفرتاصد اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دوره صفرتاصد شده است؟چرا باید دوره متخص…
فصلِ: 11 , تعداد قسمت ها: 121 , سطح: صفر تا صد

این فصل در یک نگاه:

عملیات شبیه فیلتر-ساخت الرت دیالوگ وچیدمان براساس فروش-مرتب سازی-نحوه خطایابی-استفاده از bottom sheet در اندروید-سبد خری…

آموزش ساخت اپلیکیشن اندروید دیجی کالا  : ساخت برنامه اندروید یکی از پر طرفدارترین آموزش های کلیک سایت می باشد. با توجه به فراگیر شدن سیستم اندروید و آشنایی افراد با این سیستم ، برنامه های ک…
فصلِ: 3 , تعداد قسمت ها: 179 , سطح: صفر تا صد

این فصل در یک نگاه:

در این دوره آموزشی ، برنامه نویسی اندروید و ios را با استفاده از زامارین خواهیم آموخت. همچنین به صورت کاملا پروژه محور ، اپلیکیشن فروشگاهی مشابه دیجی کالا را پیاده سازی خواهیم کرد. در انته…
فصلِ: 2 , تعداد قسمت ها: 58 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: سرفصل های دوره آموزش ساخت اپلیکیشن فیلیمو معرفی اهداف دوره مقدمه و بررسی پیش نیازهای دوره بررسی جزئی و …
فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت api key-آموزش استفاده از GPS گوشی ونمایش مکان شخص برروی نقشه-متصل کردن چند نقطه برروی نقشه با خط-رسم چند ضلعی…

حتما دمو دوره رو ببینید اولین دوره کامل کار با نقشه گوگل ومسیریابی در نقشه گوگل(این اموزش مشابه فارسی ندارد) اموزش کار با نقشه گوگل در برنامه نویسی اندروید یکی از مهم ترین مباحث هست که …
فصلِ: 1 , تعداد قسمت ها: 14 , سطح: صفر تا صد

این فصل در یک نگاه:

ساخت انواع نوتیفیکیشن ها -کار با وب سرویس پوشه-ارسال نوتیفیکیشن با سرویس پوشه-ارسال نوتیفیکیشن با one signal-اموزش کار ب…

با این مجموعه همه چیز در مورد نوتیفیکیشن و فایربیس رو خواهید اموخت یکی از مواردی که در استخدام کاربران در شرکت های برنامه نویسی بسیار موثر هست مبحث کار با firebase هست که ما دراین دوره ام…
فصلِ: 1 , تعداد قسمت ها: 16 , سطح: صفر تا صد

این فصل در یک نگاه:

لیست کردن فایل های صوتی ویدیویی گوشی-طاحی متریال وزیبا-استفاده از تب بندی-حرکت سیک بار همراه با اهنگ وزمان-ست کردن زمان …

توضیحات کلی مجموعه: اموزش ساخت یک موزیک پلیر و ویدیو پلیر ح رفه ای که کاملا کاربردی است و قابلیت نصب روی گوشی های مختلف را دارد از جمله امکانات این اپلیکیشن: لیست کردن فایل های صوتی وید…
فصلِ: 1 , تعداد قسمت ها: 61 , سطح: صفر تا صد

این فصل در یک نگاه:

اموزش ساخت اپلیکیشن کافه بازار-اشتراک گذاری اپلیکیشن-کار با رتروفیت-کاربا ران تیم پرمیشن- کار با فرگمنت ها-کار با sqlite…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دو…
فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد

این فصل در یک نگاه:

پرداخت درون برنامه ای بازار-اموزش فروش سکه-اموزش فروش اشتراک-اموزش فروش نسخه پولی-اموزش چک کردن خرید کردن کاربر-اموزش کا…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 1 , تعداد قسمت ها: 20 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش کامل پیکربندی mvp-اموزش اتصال با سرور با رتروفیت و rxjava-اموزش کار با دیتابیس-آموزش کار با bottom navigation-اموز…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 1 , تعداد قسمت ها: 35 , سطح: متوسط

این فصل در یک نگاه:

این آموزش در یک فصل شامل 35 جلسه آموزش تصویری به همراه سورس کد ارائه شده است.…

سرفصل ها مقدمه و معرفی متد آموزشی بررسی جزئی و خلاصه موارد موردنیاز پیش از آموزش شامل: کار با ویوها،  کار با کتابخانه های مختلف و ... …
فصلِ: 1 , تعداد قسمت ها: 1 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ارسال پیامک با سامانه مدیر پیامک-ارسال کد فعال سازی برنامه با پیامک-اعتبارسنجی کد فعال سازی-ثبت نام در اپلیکیشن با…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 2 , تعداد قسمت ها: 19 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ارسال توکن در اندروید -اموزش امنیت در برنامه نویسی اندروید-اموزش ارسال توکن در هدر در اندروید-اموزش ساخت token -ام…

توضیحات کلی مجموعه: دموی دوره را حتما ببینید دوره امنیت و دیزاین پترن در برنامه نویسی اندروید که شامل دو فصل هست. فصل اول شامل اموزش singletone design patern-builder design patern-command …
فصلِ: 2 , تعداد قسمت ها: 44 , سطح: صفر تا صد

این فصل در یک نگاه:

در فصل دوم این دوره بیشتر میپردازیم به کار با کتابخانه ها و موارد پیشرفته تر مانند دوربین ، ضبط صدا، دیتا بیس ، و .....…

توضیحات کلی مجموعه: سلام خدمت کلیک سایتی های عزیز مجموعه آموزشی صفر تا صد برنامه نویسی اندروید در محیط بیسیک 4 اندروید (basic 4 android) معرفی محیط بیسیک 4 اندروید محیط b4a  تحت کمپانی A…
فصلِ: 3 , تعداد قسمت ها: 61 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل جدید و اپدیت های جدید-آموزش کار با برودکست ریسیور در کاتلین-آموزش چک کردن اتصال به اینترنت در کاتلین-اموزش اپلود کرد…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 5 , تعداد قسمت ها: 21 , سطح: متوسط

این فصل در یک نگاه:

نحوه ارورگیری-رفع ایراد-رفع مشکل-اشتراک گذاری مطالب-ساخت اکتیویتی تنظیمات-اشتراک گذاری مطالب-جستجو کردن…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 5 , تعداد قسمت ها: 128 , سطح: صفر تا صد

این فصل در یک نگاه:

پرداخت درون برنامه ای بازار با کاتلین…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 8 , تعداد قسمت ها: 62 , سطح: صفر تا صد

این فصل در یک نگاه:

اپلود تصاویر روی سرور نود جی اس-کار با کانال در چت- ساخت کانال-ساخت گروه-تفاوت کانال و گروه-انلاین بودن-ارسال تصاویر در …

  توضیحات کلی مجموعه آموزش اندروید اپلیکیشن چت مشابه تلگرام( با استفاده از Socket IO ): دموی مجموعه را حتما ببینید دراین دوره سعی میشود بسیاری از اپشن هایی که اپلیکیشن موبوگرام داراست ر…
فصلِ: 6 , تعداد قسمت ها: 194 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل آپدیت های مربوط به دوره را قرار میدهیم…

با سلام و خسته نباشد خدمت کلیک سایتی های عزیز در ادامه با توضیحات مختصری درمورد دوره ی react native با ما همراه باشید: React Native چیست؟ قطعا یکی از آرزوهای برنامه نویسان این میباشد که ب…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید