2012-12-15 27 views
3

这是我的代码,但这就要求我的活动,而不是我想要的功能,这个代码是inturn在服务做了一个功能下运行:使用AlarmManager()调用一个函数

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

是'abc.class'的'Activity'?你需要一个'BroadCastReceiver',如果你想做一些逻辑*然后*与服务对话,启动其他的东西,等等。 –

+0

是的abc.class一个活动,我运行这个功能在服务,我能够根据需要从Activity访问所需的东西,我的意思是时间从选择器的值提供给参数下的服务的功能,**所以我只想知道如何使用intents等来调用服务中的特定功能本身?** – Naaz

回答

2

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

你没有,至少不是直接。

您可以创建服务,并且您可以使用getService()PendingIntent以便AlarmManager调用该服务。但是,您将获得onStartCommand()的控制权,而不是其他“服务本身的特定功能”。如果您愿意,欢迎您拨打onStartCommand()的其他“服务本身的特定功能”,但请记住,您处于主要应用程序线程中,因此不能做太多工作。如果你有很多工作要做,你可以考虑创建一个IntentService而不是一个普通的Service,这样你就可以控制后台线程(在onHandleIntent())。

+0

我只需要一个非常小的东西来这样做,因此我将坚持服务,任何示例? – Naaz

+1

@ user1898249:我没有一个使用'AlarmManager'的普通'Service'的例子,因为这很奇怪。这是一个使用相当小的'IntentService':https://github.com/commonsguy/cw-omnibus/tree/master/AlarmManager/Scheduled – CommonsWare

+0

我必须绑定服务与其链接的活动? – Naaz

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