بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

کسانی که با سرویس کار کردند لطفا راهنمایی کنند

مدیریت گفتگو
D E V I L 10 سال پیش
آخرین تغییر: 6 سال پیش

سلام

دوستان من از SignalR داخل پروژه خودم برای دریافت اطلاعات از سرور استفاده میکنم و این کار رو با سرویس انجام میدم.مشکل اینجاست که من نیاز به اجرای سرویس بصورت دائمی دارم.روش هایی که برای این کار مطرح شده استفاده از الارم منیجر هست ولی الارم منیجر در نسخه های بالا درست اجرا نمیشه و مصرف باطری رو هم بالا میبره.البته جاب اسکجولر هم وجود داره.من بجای استفاده از الارم منیجر تو ondestroy سرویس با استفاده از broadcasrt دوباره سرویس رو اجرا میکنم.حالا روش درستی هست یا نه نمیدونم ولی جواب میده.مشکل اینجاست که وقتی اپلیکیشن کلا بسته بشه متد ondestroy اجرا نمیشه و سرویس عملا از کار میفته.سرویس رو هم بصورت START_STICKY اجر ا میکنم.

از دوستانی که تجربه دارند سناریویی برای این کار سراغ دارند.مثل تلگرام که سرویسشو حتی دستی هم ببندی سریعا اجرا میشه.ممنونم

نظرات

ایمان 10 سال پیش
اگه کسی سوال دوستمون میدونه جواب بده لطفا.من خیلی دنبال جواب ایشونم
Criss 10 سال پیش
یه لینک اینجا معرفی کردم ممکنه مشکلوت رو حل کنه : لینک
ghazalcomputer 9 سال پیش
آقا توروخدا بگو چه جوری اصلا با signalR کار کردی ؟؟؟ من اصلا نمیدونم چه جوری باید کار کنم

پاسخ‌ها 2

Shadow 9 سال پیش

ابتدا توی مانیفیست این کدها رو اضافه کنید :

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<receiver
android:name=".service.BootCompleteReceiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>

اینم از کلاسی که توی مانیفیست تعریف کردیم :

public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, MyService.class);
context.startService(service);
}
}

داخل سرویس توی متد   onStartCommand  باید حتما return START_STICKY رو بنویسید.

 

این متد هم داخل سرویستون بنویسید 

@Override
public void onTaskRemoved(Intent rootIntent) {
Intent intent = new Intent(getApplicationContext(), this.getClass());
intent.setPackage(getPackageName());
startService(intent);
super.onTaskRemoved(rootIntent);
}

و در آخر اینو اول متد onStartCommand بنویسید 

onTaskRemoved(intent);

 

توجه کنید که برای تست سرویس شما حتما باید از برنامه تون generate sign apk بگیرید در حالت تست با مشکل برمی خورید.

 

نظرات

احسان 9 سال پیش

سلام از این آموزش استفاده کن . برای من که داره درست کار میکنه. مصزف باتری هم زیاد نیستش توی این روش:

لینک : ایجاد سرویس در اندروید

نظرات

Atras 6 سال پیش
آقا این لینک مشکل داره منظورت کدوم آموزشه؟

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .