我知道有很多问题但我真的不知道我的错误在哪里。
我的服务已在AndroidManifest.xml文件中注册
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.app" >
...
<service android:name="com.example.android.app.ScheduledService">
</service>
</application>
</manifest>
我的服务扩展了IntentService
public class ScheduledService extends IntentService {
public ScheduledService() {
super("ScheduledService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d(getClass().getSimpleName(), "I ran!");
}
}
我的活动启动服务
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(getClass().getSimpleName(), "Setting alarm!!");
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this, com.example.android.app.ScheduledService.class);
PendingIntent pending = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() +
10 * 1000, pending);
}
}
我没有在日志中看到任何异常。我还应该做些什么来设置我的闹钟?
答案 0 :(得分:25)
与documentation一样,PendingIntent.getBroadcast()
用于检索将执行广播的PendingIntent
,例如调用Context.sendBroadcast()
。
您需要拨打PendingIntent.getService()
,这将启动IntentService
:
PendingIntent pending = PendingIntent.getService(this, 0, alarmIntent, 0);
答案 1 :(得分:1)
仔细查看AlarmManager
API和PendingIntent
。 AlarmManager.set()
API期待您提供的广播意图。但是,您正在尝试向服务发送广播意图,这是无法完成的。只需创建一个BroadcastReceiver
即可抓住Intent
,然后您的无线网络应该开始提供服务。
答案 2 :(得分:0)
API说:
通常来自IntentSender.getBroadcast()。
这意味着PendingIntent.getService
也可以运作。
我测试了它,它确实有用。