3

これは私のコードですが、これは私が望む関数の代わりに私のアクティビティを呼び出します。このコードは、サービスで作成された関数の下で実行されます。

Intent intent = new Intent(this, abc.class);
        PendingIntent pi = PendingIntent.getService(Server.this, 0, intent, 0);
        AlarmManager almmgr = (AlarmManager) getSystemService(ALARM_SERVICE);
        Calendar cldr = Calendar.getInstance();
        int min1 = cldr.get(Calendar.MINUTE);
        cldr.setTimeInMillis(System.currentTimeMillis());
        cldr.add(Calendar.SECOND, 30);
        almmgr.set(AlarmManager.RTC_WAKEUP, cldr.getTimeInMillis(), pi);

基本的に、2つのタイムピッカーから入力を取得し、これら2つの時間の差が達成されたら、いくつかの制御を行う関数を呼び出します。

4

2 に答える 2

5

これは私がいくつかの異なるプロジェクトから一緒に石畳にした例であり、この質問に出くわした人のために働くかもしれません:

    BroadcastReceiver br = new BroadcastReceiver() {
             @Override
             public void onReceive(Context c, Intent i) {     
                 Toast.makeText(c, "A toast!", Toast.LENGTH_LONG).show();
             }
    };
    registerReceiver(br, new IntentFilter("com.example.filterMe") );

    AlarmManager mgr=(AlarmManager) getSystemService(Context.ALARM_SERVICE);
    PendingIntent pi = PendingIntent.getBroadcast( this, 0, new Intent("com.example.filterMe"),0);

    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 30000, pi); // 30 second repeat for testing
于 2013-09-24T15:53:19.707 に答える
3

では、インテントなどを使用してサービス自体の特定の関数を呼び出す方法を知りたいだけです。

少なくとも直接ではありません。

サービスを作成し、を使用しgetService() PendingIntentAlarmManagerそのサービスを呼び出すことができます。ただし、onStartCommand()他の「サービス自体の特定の機能」ではなく、で制御を取得します。必要に応じて、他の「サービス自体の特定の関数」を呼び出すことonStartCommand()もできますが、メインのアプリケーションスレッドを使用しているため、あまり実行できないことに注意してください。IntentServiceやるべきことがたくさんある場合は、プレーンの代わりに作成することを検討してServiceください。そうすれば、バックグラウンドスレッド(で)を制御できますonHandleIntent()

于 2012-12-15T17:36:03.393 に答える