使用AlarmManager()调用函数

时间:2012-12-15 16:31:10

标签: android

这是我的代码但这会调用我的活动而不是我想要的函数,这段代码在一个服务中运行的函数下运行:

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 个答案:

答案 0 :(得分:4)

这是一个我从几个不同的项目拼凑而成的例子,可能适合那些遇到这个问题的人:

    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

答案 1 :(得分:2)

  

所以我只想知道如何使用Intent等来调用服务本身的特定函数?

你不,至少不是直接。

您可以创建服务,并且可以使用getService() PendingIntentAlarmManager调用该服务。但是,您将获得onStartCommand()中的控制权,而不是服务本身中的其他“特定功能”。如果您愿意,欢迎您从onStartCommand()调用其他“服务中的特定功能”,但请记住您在主应用程序主题上,因此无法做很多事情。如果您还有很多工作要做,可以考虑创建IntentService而不是普通Service,这样就可以控制后台线程(onHandleIntent())。< / p>