Phonegapアプリを特定の時間に開始する(目覚まし時計)

Start my Phonegap App at a specific Time (Alarm Clock)


質問 written by Sawny @2013-08-14 14:40:33Z

: 6 : 3 : 1

それでは、特定の時間に目覚まし時計と同じ機能でPhonegapアプリを起動しようとしています。 この目的のために、私は自分のプラグインを書き込もうとしました:

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); 原因:

    タイプPendingIntentのメソッドgetBroadcast(Context、int、Intent、int)は、引数(alarm、int、Intent、int)には適用されませんalarm.java`

私のレシーバーJavaファイルはAlarmReciever.javaと呼ばれAlarmReciever.java

誰かが私が間違っていることを見たら、私は助けに感謝します。

コメント 1

私は同様のことをしようとしている、私はphonegap目覚まし時計で検索し、プラグインを見つけました。明らかに、iOSでは機能しません。

written by user1509810 @2012-07-08 09:29:04Z

コメント 2

ctx (コンテキスト)を取得するには、 cordova.getActivity().getApplicationContext();使用できますcordova.getActivity().getApplicationContext();また、 このチュートリアルは途中であなたを助けるかもしれません。

written by Sawny @2013-08-14 14:19:07Z

回答 1 written by Xiang @2013-08-21 07:42:26Z
4

@shaishが言ったように、最初にContext参照を作成して、Android操作を行えるようにします。

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

コンテキストを使用して、Intentを作成し、PendingIntentを作成し、システムサービスを取得します。

Use the context to create Intent, create PendingIntent and acquire system service.

もう1つの問題は、AlarmReceiverクラスです。 BroadcastReceiverを拡張する必要があります。

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);

そして、AndroidManifest.xmlにそれを入れる必要があります:

Another issue is the AlarmReceiver class. It should be extending BroadcastReceiver:

BroadcastReceiverの代わりに、AlarmReceiverがアクティビティである場合は、次を使用できます。

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()");
    }
}

アクティビティを直接起動します。

回答 2 written by shaish @2013-08-20 23:36:40Z
2

アラームサービスに使用したコードは、コンテキストで使用するためのものです。 コンテキストを取得する必要があります(おそらくContext ctx = cordova.getActivity()。getApplicationContext()のようなものを使用します)。

次に、1でctx.getSystemServiceを使用し、3でこれを渡す代わりにctxを渡し、ALARM_SERVICEの代わりにContext.ALARM_SERVICEを書き込みます。

回答 3 written by Nitin Gaikwad @2013-08-20 09:21:31Z
1

これは、特定の時間にアプリケーションを開始するバックグラウンドサービスを使用して行うことができます。