2016-04-01 27 views
2

Android'de bir yeni kullanıcıyım. Bugün Hatırlatma uygulamam için AlarmManage ile çalışmayı denedim ve kullanıcıların bildirim göstermesi için saat ve dakikaları girmelerine izin verdim ve bununla ilgili bir sorunum var. 1. İlk sorun, bildirim göründüğünde, yalnızca titreşim ve ses gelmedi, ancak bildirim için ses varsayılanını ayarladım ve telefonumun sesini ayarlamasına izin verdim. 2. Uygulamayı kapattığımda, bildirime dokunduğumda, MainActivity gösterilecek ve yine uygulamamın bildirimini tekrar gösterecek bir AlarmManager çalışmayacak. Ancak, uygulama açıldığında bildirime dokunursam, bildirim gösterilmez. bu yüzden başvurumu sadece bir kez bildirimi istiyorum. Nasıl yapabilirim ?. 3. Hatırlatmak için zaman ayarlamama rağmen, ancak uygulamayı kapattığımda, hiç bir zaman ayarlamadığım zamanlarda telefonum, hatırlatma uygulamamın bildirimini görüntülüyor. Bu sorunu nasıl giderebilirim?Aktivite başladığında AlarmManager nasıl durdurulur

MyAlarmService

private NotificationManager mManager; 

@Override 
public IBinder onBind(Intent arg0) 
{ 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() 
{ 
    // TODO Auto-generated method stub 
    super.onCreate(); 
} 

@SuppressWarnings("static-access") 
@Override 
public void onStart(Intent intent, int startId) 
{ 
    super.onStart(intent, startId); 
    // Toast.makeText(this, "I'm running", Toast.LENGTH_SHORT).show(); 
    long[] v = {500,1000}; 
    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this) 
        .setVibrate(v) 
        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
        .setSmallIcon(R.drawable.ic_remind) 
        .setContentTitle("My notification") 
     .setContentText("This is a test message!"); 
    mBuilder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI); 
    mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
    mBuilder.setAutoCancel(true); 
    Intent intent1 = new Intent(this.getApplicationContext(),MainActivity.class); 
    intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(intent1); 



    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this.getApplicationContext(),0, intent1,PendingIntent.FLAG_UPDATE_CURRENT); 
    mBuilder.setContentIntent(pendingNotificationIntent); 
    mManager =(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    mManager.notify(0, mBuilder.build()); 

} 

@Override 
public void onDestroy() 
{ 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
} 

Alıcı

public void onReceive(Context context, Intent intent) 
{ 
    Intent service1 = new Intent(context, MyAlarmService.class); 
    context.startService(service1); 
} 

MainActivity

super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final EditText edt_hours = (EditText)findViewById(R.id.edt_hour); 
    final EditText edt_minutes = (EditText)findViewById(R.id.edt_minutes); 
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Calendar calendar = Calendar.getInstance(); 
      calendar.setTimeInMillis(System.currentTimeMillis()); 
      calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(edt_hours.getText().toString())); 
      calendar.set(Calendar.MINUTE, Integer.parseInt(edt_minutes.getText().toString())); 
      //calendar.set(Calendar.SECOND,0); 

      Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); 
      pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); 

      alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
      alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

     } 
    }); 



} //end onCre 

p/s: ingilizcem iyi olmadığı için benim sorum açıkça değilse çok üzgünüm. Ve bu soruyu okuyan herkes için teşekkür etmek istiyorum.

cevap

3

İşte örnek kodum. Bence sana yardım edecek.

MainActivity

public static int NOW_NOTIFICATION = 101; 

Intent intent = new Intent(MainActivity.this, NotificationReceiver.class); 
       intent.putExtra(NotificationReceiver.NOTIFICATION_MESSAGE, "Sample Alert"); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(
         MainActivity.this, NOW_NOTIFICATION, intent, PendingIntent.FLAG_ONE_SHOT); 

       cancelNotification(NOW_NOTIFICATION); 
       AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
       alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
         + (2 * 1000), pendingIntent); 

İptal için Bildirim:

public void cancelNotification(int requestCode) { 
     try { 
      Intent notificationIntent = new Intent(getApplicationContext(), NotificationReceiver.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
      alarmManager.cancel(pendingIntent); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

NotificationReceiver:

public class NotificationReceiver extends BroadcastReceiver { 
    public static String NOTIFICATION_MESSAGE = "notificationMessage"; 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     String message = intent.getStringExtra(NOTIFICATION_MESSAGE); 
     NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     //Define sound URI 
     Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     Intent notificationIntent = new Intent(context, EmptyActivity.class); 
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
     final DateTime dateTime = DateTime.now(); 
     int color = 0xffffaa00; 
//  int color1 = context.getColor(R.color.notificatinBackgroundColor); 
     NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
     builder.setSmallIcon(R.drawable.festi_push_message_small); 
     builder.setContentIntent(pendingIntent); 
     builder.setContentTitle("Notification Sample"); 
     builder.setAutoCancel(true); 
     builder.setContentText(message + ", Current Time : " + dateTime.getHourOfDay() + ":" + dateTime.getMinuteOfHour() + ":" + dateTime.getSecondOfMinute()); 
     builder.setSound(soundUri); 
     builder.setLights(Color.RED, 1000, 1000); 
     builder.setColor(color); 


     Notification notification = builder.build(); 

     notification.flags |= Notification.FLAG_AUTO_CANCEL; 

     notificationManager.notify(102938, notification); 
    } 

} 

AndroidManifest.xml

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

teşekkürler kardeşim, mükemmel çalışıyor. Ama kodumun neden çalışmadığını bilmiyorum. Ve kodunuzda, ses hala çalışmıyor –

+0

Kusura bakma, Bunu kullan "niyet amacı = yeni niyet (MainActivity.this, NotificationReceiver.class);" "Niyet amacı = yeni Niyet (MainActivity.this, AlarmReceiver.class)" yerine; MainActivity içinde. Ve şimdi tekrar deneyin – Sabari

+0

Kodunu kullanıyorum ama ses hala çalışmıyor :(.Ben bu sorun benim telefonum :(. Bcuz i app chplay aynı uygulamayı deneyin.Ancak ses değil endişe.) –