بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
استفاده از service به جای Activity در AlarmManager
من می خواهم یک سری عملیات را در پس زیمینه انجام دهم. توی آموزش 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 !");
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .