2016-05-13 98 views
1

我在我的应用程序中有3个按钮通知在一段时间后不需要显示。但只在当场工作

第一个按钮显示通知单击按钮。

第二个按钮是取消显示的通知。

第三个按钮必须在5秒后显示通知。

第一个和第二个按钮正在工作,但第三个按钮不工作。它在编译时不显示任何错误。 有人可以告诉我这段代码有什么问题吗?

public void setAlarm(View view) { 
     Long alertTime=new GregorianCalendar().getTimeInMillis()+5000; 
     Intent alertIntent=new Intent(this,AlertReceiver.class); 
     AlarmManager alarmManager=(AlarmManager) 
       getSystemService(Context.ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, 
       PendingIntent.getBroadcast(this,1, alertIntent, 
         PendingIntent.FLAG_UPDATE_CURRENT)); 
    } 

这里是我完整的活动主类

package com.test.notification2; 

import android.app.AlarmManager; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.app.TaskStackBuilder; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.NotificationCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import java.util.GregorianCalendar; 

public class MainActivity extends AppCompatActivity { 

    Button showNotificationBut, stopNotificationBut,alertButton; 
    NotificationManager notificationManager; 

    boolean isNotificActive=false; 

    int notifID=33; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     showNotificationBut=(Button)findViewById(R.id.showNotificationBut); 
     stopNotificationBut=(Button)findViewById(R.id.stopNotificationBut); 
     alertButton=(Button)findViewById(R.id.alertButton); 


    } 


    public void showNotification(View view) { 
     NotificationCompat.Builder notificBuilder= new 
       NotificationCompat.Builder(this) 
       .setContentTitle("Message") 
       .setContentText("New Message") 
       .setTicker("Alert New Message") 
       .setSmallIcon(R.drawable.my_image); 

     Intent moreInfoIntent=new Intent(this,MoreInfoNotification.class); 

     TaskStackBuilder taskStackBuilder=TaskStackBuilder.create(this); 
     taskStackBuilder.addParentStack(MoreInfoNotification.class); 
     taskStackBuilder.addNextIntent(moreInfoIntent); 
     PendingIntent pendingIntent=taskStackBuilder.getPendingIntent(0, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     notificBuilder.setContentIntent(pendingIntent); 

     notificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(notifID, notificBuilder.build()); 
     isNotificActive=true; 


    } 

    public void stopNotification(View view) { 
     if(isNotificActive){ 
      notificationManager.cancel(notifID); 
     } 
    } 

    public void setAlarm(View view) { 
     Long alertTime=new GregorianCalendar().getTimeInMillis()+5000; 
     String s = String.valueOf(alertTime); 
     Toast.makeText(this,s,Toast.LENGTH_SHORT).show(); 

     Intent alertIntent=new Intent(this,AlertReceiver.class); 
     AlarmManager alarmManager=(AlarmManager) 
       getSystemService(Context.ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, 
       PendingIntent.getBroadcast(this,1, alertIntent, 
         PendingIntent.FLAG_UPDATE_CURRENT)); 
    } 
} 

下面是AlertReceiver类:

package com.test.notification2; 

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.support.v4.app.NotificationCompat; 

/** 
* Created by waqas on 13/05/2016. 
*/ 
public class AlertReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     createNotification(context,"Times up","5 seconds has passed", 
       "Alert"); 
    } 
    public void createNotification(Context context,String msg,String msgText, String msgAlert){ 
     PendingIntent notificIntent=PendingIntent.getActivity(context, 0, 
       new Intent(context,MainActivity.class),0); 
     NotificationCompat.Builder mBuilder=new NotificationCompat.Builder(context) 
       .setSmallIcon(R.drawable.my_image) 
       .setContentTitle(msg) 
       .setTicker(msgAlert) 
       .setContentText(msgText); 
     mBuilder.setContentIntent(notificIntent); 
     mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND); 
     mBuilder.setAutoCancel(true); 
     NotificationManager mNotificationManager= 
       (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(1,mBuilder.build()); 

    } 
} 
+0

这里有人? –

回答

4

此代码工作正常。 你有没有在清单中注册服务?

 <receiver android:name=".AlertReceiver"> 
    </receiver> 
+0

是的,你100%正确。感谢帮助! –

+0

如果它有用,请接受我的回答:) – deepThought

相关问题