آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استفاده از service به جای Activity در AlarmManager

AhmadVB  11 سال پیش  11 سال پیش
+3 0

من می خواهم یک سری عملیات را در پس زیمینه انجام دهم. توی آموزش AlarmManager استاد ، استاد یک Intent از Activity ساخته و هر بار که AlaramManager اجرا می شود این فرم باز می شود. من نمی خواهم هیچ چیزی در ظاهر عملیات باز شود.

به جای Activity درون ویدئوی آموزشی یک سرویس ساختم به صورت زیر :

 
public class ServiceAlarm extends IntentService {

public ServiceAlarm(String name) {
super(name);
// TODO Auto-generated constructor stub
}


@Override
protected void onHandleIntent(Intent intent) {
Log.i("LOG", "Alarm !");
}
}

کدی که آلارم منیجر را تعریف می کند هم این است :

Intent myIntent = new Intent(G.context, ServiceAlarm.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getService(G.context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, 5000, pendingIntent);

و BroadcastReciver :

 public class BackgroundReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
Log.i("LOG", "Receiver executed !");
context.startService(new Intent(context, ServiceAlarm.class));
}
}

این هم Manifest

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

...

<receiver android:name=".BootCompleteReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
<receiver android:name=".BackgroundReceiver"/>

ولی آلارم اجرا نمی شود.

+2 0
FLAG_ACTIVITY_NEW_TASK برای اجرای Activity کاربرد داره ، پس اونو پاک کنید - Brodcast هم که برای اجرای سرویس بعد از روشن شدن دستگاه هست و کاری با Alarm نداره ، تست کردید که سرویس اجرا میشه؟ - بجز موردی که گفتم ایراد دیگه ای دیده نمیشه ، مگر اینکه کلاً آلارم set نشه. (11 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
AhmadVB  11 سال پیش
+2 0

@SPIRIT آن کاری که شما فرمودید را اول انجام دادم درست نشد رفتم Help گوگل را خواندم.

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

<service 
android:name=".ServiceAlarm"
android:exported="false"/>

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

 public class ServiceAlarm extends IntentService{
public ServiceAlarm(){
super("ServiceAlarm");
// TODO Auto-generated constructor stub
}


@Override
protectedvoid onHandleIntent(Intent intent){
Log.i("LOG","Alarm !");
}
}
+1 0
یه پروژه درست کردم ، همه چیز درست بود ، AndroidStudio خودش Activity , Broadcast , Service رو به Manifest اضافه میکنه دیگه اونجا رو نگاه نکردم ، الان دیدم بله موردی که گفتید رو لحاظ کرده ، یه نگته جدید یادگرفتیم ، ممنون (11 سال پیش)

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