2015-10-19 88 views
0

我需要在指定日期進行通知。我有MainActivity:不工作AlarmManager

public class MainActivity extends Activity 
{ 
private PendingIntent pendingIntent; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //if only it all is working.But me need notification at 12:12:00 PM 19.10.15 
    //Utils.generateNotification(getApplicationContext()); 
    Calendar calendar = Calendar.getInstance(); 
    //set notification for date --> 19th Oct 2015 at 12:12:00 PM 
    calendar.set(Calendar.MONTH, 10); 
    calendar.set(Calendar.YEAR, 2015); 
    calendar.set(Calendar.DAY_OF_MONTH, 19); 

    calendar.set(Calendar.HOUR_OF_DAY, 12); 
    calendar.set(Calendar.MINUTE, 12); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.AM_PM,Calendar.PM); 
    Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); 
} 

和MyReceiver

public class MyReceiver extends BroadcastReceiver 
{ 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    /*Intent service1 = new Intent(context, MyAlarmService.class); 
    context.startService(service1);*/ 
    Log.i("App", "called receiver method"); 
    try{ 
     Utils.generateNotification(context); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

和一些類是信息通報工作。

public class Utils { 

public static NotificationManager mManager; 

public static void generateNotification(Context context){ 

    mManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); 
    Intent intent1 = new Intent(context,MainActivity.class); 
    Notification notification = new Notification(R.drawable.ic_launcher,"This is a test message!", System.currentTimeMillis()); 
    intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(context,0, intent1,PendingIntent.FLAG_UPDATE_CURRENT); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notification.setLatestEventInfo(context, "AlarmManagerDemo", "This is a test message!", pendingNotificationIntent); 
    mManager.notify(0, notification); 
} 

和清單:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
<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="com.example.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=".MyReceiver" 
       android:enabled="false"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 
</application> 

有什麼不對? 推薦我怎麼才能實現指定時間的通知。 P.S.最好的英語:) SRY

LINK: Hyperlink(Project)

+0

沒有顯示消息(通知) –

+0

你嘗試翻轉一個月變量的月和日。看起來他們倒退了。 – wiiwilleat

+0

當準備出版 –

回答

1

看起來像你的接收器被設置爲只觸發通知離子重啓。繼續並將其更改爲此。

<receiver android:name=".MyReceiver" /> 

設置一個意圖過濾器會指出接收器將如何被觸發。

More on intent-filters

+0

我的答案,如其他答案之一.. \t 對我來說它不工作:(如果你能幫助我。我加超鏈接(在主帖子的末尾)爲我的項目 –

1

看這個

<receiver android:name=".MyReceiver" 
       android:enabled="false"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 

確實啓用了MyReceiver接收機 通過移除啓用它這個android:enabled="false"或代碼,使之像這樣

ComponentName receiver = new ComponentName(context, MyReceiver.class); 
PackageManager pm = context.getPackageManager(); 

pm.setComponentEnabledSetting(receiver, 
     PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
     PackageManager.DONT_KILL_APP); 
+0

它不工作對我來說:(如果你能幫助我。我加超鏈接(在我犯了這個錯誤主後結束)爲我的項目 –