2014-03-14 45 views
10

我知道有很多這方面的問題,但我真的不知道我的錯誤在哪裏。IntentService不會開始使用AlarmManager

我的服務被註冊在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); 
    } 
} 

我沒有看到任何日誌中的異常。還有什麼我應該做的安裝我的鬧鐘?

回答

21

與在documentation中一樣,PendingIntent.getBroadcast()用於檢索將執行廣播的PendingIntent,如調用Context.sendBroadcast()

你需要調用PendingIntent.getService()代替,這將啓動IntentService:在AlarmManager API和PendingIntent密切

PendingIntent pending = PendingIntent.getService(this, 0, alarmIntent, 0); 
+0

啊,謝謝。雖然我覺得有點尷尬,不知道這一點。 – Migore

+0

第四個參數是否應該始終設置爲0才能使用? – mr5

0

看。 AlarmManager.set() API正在等待您提供的廣播意圖。但是,您正嘗試將廣播意圖發送給服務,這是無法完成的。只需創建一個BroadcastReceiver即可獲得Intent,然後您的BR應該開始您的服務。

0

的API說:

通常來自IntentSender.getBroadcast()。

這意味着PendingIntent.getService也可以工作。 我測試過了,它工作。