2015-10-19 79 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

它不工作对我来说:(如果你能帮助我。我加超链接(在我犯了这个错误主后结束)为我的项目 –