Я хочу простой таймер, который выполняет набор команд, и он должен быть точным. Он также должен продолжаться, если приложение сведено к минимуму (скрыто) или телефон находится в режиме сна (спящий режим процессора). Я смотрел на посты на этих сайтах:AlarmManager и Service не работают над моим приложением
Я попытался понять код и добавить его в свой собственный новый проект, но приложение закрывается на старте. Это то, что у меня есть.
MainActivity OnCreate()
Intent myAlarm = new Intent(getApplicationContext(), AlarmReceiver.class);
PendingIntent recurringAlarm = PendingIntent.getBroadcast(getApplicationContext(), 0, myAlarm, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarms = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Calendar updateTime = Calendar.getInstance();
updateTime.setTimeInMillis(5000); // first reoccurance
int customInterval = 5000; // 5 seconds intervals
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, updateTime.getTimeInMillis(), customInterval, recurringAlarm);
AlarmReceiver.class/AlarmReceiver.java
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
Intent myService = new Intent(context, YourService.class);
context.startService(myService);
}
}
YourService.class/YourService.java
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class YourService extends Service {
@Override
public IBinder onBind(Intent intent) { // Automatically added by adding Service extension
// TODO Auto-generated method stub
return null;
}
}
манифеста
<manifest
... >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
... >
<service android:name=".YourService"></service>
<receiver android:name=".AlarmReceiver"></receiver>
<activity
... >
...
</activity>
</application>
</manifest>
Приложение падает на старте. Что не так с кодом?
Все, что я хочу - это приложение, чтобы запустить Тревогу через MainActivity, которая выполняет набор команд каждый определенный интервал (даже если телефон находится в режиме сна). Я слышал, что способ сделать это - создать и Alarm, который создает Сервис, и команды входят в сервис.
Что я делаю неправильно?
LogCat
04-25 15:49:45.799: E/AndroidRuntime(32359): FATAL EXCEPTION: main
04-25 15:49:45.799: E/AndroidRuntime(32359): java.lang.RuntimeException: Unable to instantiate service com.example.wifischedule.YourService: java.lang.ClassCastException: com.example.wifischedule.YourService cannot be cast to android.app.Service
04-25 15:49:45.799: E/AndroidRuntime(32359): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2388)
04-25 15:49:45.799: E/AndroidRuntime(32359): at android.app.ActivityThread.access$1600(ActivityThread.java:140)
04-25 15:49:45.799: E/AndroidRuntime(32359): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
04-25 15:49:45.799: E/AndroidRuntime(32359): at android.os.Handler.dispatchMessage(Handler.java:99)
04-25 15:49:45.799: E/AndroidRuntime(32359): at android.os.Looper.loop(Looper.java:137)
04-25 15:49:45.799: E/AndroidRuntime(32359): at android.app.ActivityThread.main(ActivityThread.java:4898)
04-25 15:49:45.799: E/AndroidRuntime(32359): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 15:49:45.799: E/AndroidRuntime(32359): at java.lang.reflect.Method.invoke(Method.java:511)
04-25 15:49:45.799: E/AndroidRuntime(32359): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
04-25 15:49:45.799: E/AndroidRuntime(32359): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
04-25 15:49:45.799: E/AndroidRuntime(32359): at dalvik.system.NativeStart.main(Native Method)
04-25 15:49:45.799: E/AndroidRuntime(32359): Caused by: java.lang.ClassCastException: com.example.wifischedule.YourService cannot be cast to android.app.Service
04-25 15:49:45.799: E/AndroidRuntime(32359): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2385)
04-25 15:49:45.799: E/AndroidRuntime(32359): ... 10 more
04-25 15:49:45.854: E/android.os.Debug(2268): [email protected] > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error
04-25 15:49:52.724: E/FaceDetectionService(2268): enabled
Спасибо!
Правило номер один в Клубе переполнения стека. Если ваше приложение выходит из строя, отправьте лог-код (и направляйте людей относительно номера строки). –
Приношу свои извинения. LogCat отправлен :) – KickAss
Кажется, что YourService не является сервисом;) – Fildor