-1

我試圖讓我的應用程序使用AlarmManager在5秒後發送通知,但pendingIntent似乎沒有被調用。 繼承人我的代碼爲什麼不是我的AlarmManager調用Pendingintent

在的onCreate在MainActivity:

Long alertTime = new GregorianCalendar().getTimeInMillis()+5*1000; 
    Intent alertIntent = new Intent(this, Notification.class); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime , PendingIntent.getBroadcast(this, 1, alertIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 

Notification.class:

public class Notification extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    PendingIntent notificIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0); 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context); 
      mBuilder.setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("Title") 
      .setTicker("Ticker") 
      .setContentText("Text"); 
    mBuilder.setContentIntent(notificIntent); 
    mBuilder.setDefaults(NotificationCompat.DEFAULT_VIBRATE); 
    mBuilder.setAutoCancel(true); 
    NotificationManager mNotificationManager = 
      (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(1, mBuilder.build()); 

} 

}

Android清單:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.wouter.lifetracker" 
android:versionCode="1" 
android:versionName="1.0" android:installLocation="auto"> 

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="21" /> 
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver 
     android:name=".Notification" 
     > 
     </receiver> 

</application> 

我尋覓了好幾個小時,但我不能找出爲什麼什麼也沒有發生

回答

1

見:https://developer.android.com/reference/android/app/AlarmManager.html#set(int,長,android.app.PendingIntent)

注:API 19起,傳遞給此方法的觸發時間爲 被視爲不精確:在此時間之前,警報將不會傳遞,但可能會延遲並在一段時間後傳遞。操作系統將使用此策略,以便在整個系統中「批量」報警,最大限度地減少設備「喚醒」的次數,並最大限度地減少電池的使用。一般而言,與未來計劃中的警報不會被延遲,只要計劃在將來 附近的警報不會延遲。

1

只有5秒?

試試這個:

new Handler().postDelayed(new Runnable() { 
       public void run() { 
       showNotification(); //your notification code called after 5 seconds 
       } 
      }, 5 * 1000); // 5 seconds... 

或嘗試:

long alertTime = System.currentTimeMillis() + (5 * 1000); // <-- try this 
Intent alertIntent = new Intent(this, Notification.class); 
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime , PendingIntent.getBroadcast(this, 1, alertIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 
+0

感謝您的回覆 是的,它只有5秒鐘,這樣我可以輕鬆地請檢查是否它工作與否,在它的結束應該每天去一次。 我試過你的建議,但它仍然無效。 我在手機上測試這個應用程序,所以也許這只是我的手機有問題? – Wolion

相關問題