Запустите приложение Phonegap в определенное время (будильник)

Хорошо, поэтому я пытаюсь запустить приложение Phonegap App в определенное время, такую ​​же функциональность, как будильник. С этой целью я попытался написать свой собственный плагин:

package de.ma; import org.apache.cordova.api.PluginResult; import org.json.JSONArray; import android.content.Intent; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.util.Log; import android.app.AlarmManager; import android.app.PendingIntent; import android.os.Bundle; import java.util.Calendar; import android.os.SystemClock; import com.phonegap.api.Plugin; public class alarm extends Plugin { @Override public PluginResult execute(String arg0, JSONArray arg1, String arg2) { Calendar cal = Calendar.getInstance(); // add 5 minutes to the calendar object cal.add(Calendar.SECOND, 5); Intent intent = new Intent(ctx, AlarmReciever.class); intent.putExtra("alarm_message", "O'Doyle Rules!"); // In reality, you would want to have a static variable for the request code instead of 192837 PendingIntent sender = PendingIntent.getBroadcast(this, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT); // Get the AlarmManager service AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); return null; } } 

Но при компиляции я получаю 3 ошибки:

  1. AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); причины:

    ALARM_SERVICE не может быть разрешено переменной alarm.java

  2. Intent intent = new Intent(ctx, AlarmReciever.class); причины:

    Конструктор Intent (CordovaInterface, Class) не определен alarm.java

  3. PendingIntent sender = PendingIntent.getBroadcast(this, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT); причины:

    Метод getBroadcast (Context, int, Intent, int) в типе PendingIntent не применим для аргументов (alarm, int, Intent, int) alarm.java`

Мой приемник Java-файл называется AlarmReciever.java .

Если кто-то увидит, что я делаю неправильно, я буду благодарен за помощь.

    Как @shaish сказал, сначала создать ссылку на контекст, чтобы вы могли работать с Android :.

     Context context = cordova.getActivity().getApplicationContext(); 

    Используйте контекст для создания Intent, создания PendingIntent и получения системного обслуживания.

     Intent intent = new Intent(context, AlarmReciever.class); ... PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT); ... AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    Другой проблемой является класс AlarmReceiver. Он должен расширять BroadcastReceiver:

     public class AlarmReceiver extends BroadcastReceiver { private static final String LOG_TAG = AlarmReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Log.d(LOG_TAG, "onReceive()"); } } 

    И вам нужно поместить его в AndroidManifest.xml:

      <application> ... <receiver android:name="de.ma.AlarmReceiver"/> </application> 

    Альтернатива BroadcastReceiver, если AlarmReceiver – это Activity, вы можете просто использовать:

     PendingIntent sender = PendingIntent.getActivity(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Который запускает вашу деятельность напрямую.

    Код, который вы использовали для службы сигнализации, предназначен для использования в контексте. Вы должны получить контекст (возможно, используя что-то вроде: Context ctx = cordova.getActivity (). GetApplicationContext ().)

    А затем на 1, используйте ctx.getSystemService, в 3 вместо этого передайте ctx, а вместо ALARM_SERVICE напишите Context.ALARM_SERVICE.

    Вы можете сделать это с помощью фоновой службы, которая инициирует приложение в определенное время.