这是我的代码但这会调用我的活动而不是我想要的函数,这段代码在一个服务中运行的函数下运行:
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);
基本上我想从两个时间戳中获取输入,当这两个时间点之间的时间差异达到时,然后调用一个能够控制某些东西的函数!
答案 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()
PendingIntent
让AlarmManager
调用该服务。但是,您将获得onStartCommand()
中的控制权,而不是服务本身中的其他“特定功能”。如果您愿意,欢迎您从onStartCommand()
调用其他“服务中的特定功能”,但请记住您在主应用程序主题上,因此无法做很多事情。如果您还有很多工作要做,可以考虑创建IntentService
而不是普通Service
,这样就可以控制后台线程(onHandleIntent()
)。< / p>