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

所以我只想知道如何使用意图等来调用服务本身的特定功能?

你没有,至少不是直接的。

您可以创建一个服务,并且可以使用 agetService() PendingIntentAlarmManager调用该服务。但是,您将获得控制权onStartCommand(),而不是其他“服务本身的特定功能”。如果您愿意,欢迎您调用其他一些“服务本身的特定功能” onStartCommand(),但请记住,您在主应用程序线程上,因此不能做很多事情。如果你有很多工作要做,你可以考虑创建一个IntentService而不是一个plain Service,这样你就可以控制一个后台线程(in onHandleIntent())。

于 2012-12-15T17:36:03.393 回答