6

さて、目覚まし時計と同じ機能で、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ます。

私が間違っていることを誰かが見たら、助けていただければ幸いです。

4

3 に答える 3

4

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

もう 1 つの問題は、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>

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

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

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

于 2013-08-21T07:42:26.417 に答える