2015-11-06 6 views
0

У меня есть приложение для Android, которое должно генерировать уведомление через регулярные промежутки времени, и когда мы нажимаем на уведомление, сообщение, показанное в уведомлении, будет отображаться внутри TextView внутри действия приложения «Оригинал» ,Android Broadcast Reciever, чтобы открыть намерение

Для этого я создал AlarmReceiver.java Класс.

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.d("ME", "Notification started"); 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 


      NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
                .setSmallIcon(R.drawable.ic_noticon) 
                .setContentTitle("Notification") 
                .setContentText("You have to open app to see this message in detail"); 


      NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
      mNotificationManager.notify(1, mBuilder.build()); 


      Intent resultIntent = new Intent("com.app.AlarmBack"); 
      TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
      stackBuilder.addParentStack(AlarmBack.class); 
      stackBuilder.addNextIntent(resultIntent); 
      PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_ONE_SHOT); 
      mBuilder.setContentIntent(resultPendingIntent); 


    }  

также я создал класс для намерения под названием AlarmBack.java

public class AlarmBack extends MainActivity { 


TextView tv_alert_back_display; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 


    getLayoutInflater().inflate(R.layout.alert_back, frameLayout); 
    mDrawerList.setItemChecked(position, true); 
    setTitle(mTitle); 


    tv_alert_back_display = (TextView) findViewById(R.id.tv_alert_back_display); 


    tv_alert_back_display.setText("This is the message that needs your attension"); 
}} 

, но проблема в том, что это не работает. Это не открытие намерения, которое оно хочет открыть. Итак, кто-нибудь может помочь решить мою проблему.

+0

вы хотите откройте свою активность при нажатии на уведомление или вы хотите изменить t название и содержание уведомления? –

+0

@ ZubairAkber Я хочу открыть мероприятие при нажатии на уведомление –

+0

вы пробовали мой ответ, он работает для меня, надеюсь, что он тоже будет работать для вас –

ответ

1

вызов этого в вашем методе AlarmReceiver OnRecieve

int taskID = 1; 
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
notificationManager.notify(taskID, getNotification(context, "title", "content")); 

И добавить этот метод в Alarm Receiver

private Notification getNotification(Context context, String title, String content) { 
    Notification.Builder builder = new Notification.Builder(context); 
    builder.setContentTitle(title); 
    builder.setContentText(content); 
    builder.setSmallIcon(R.drawable.icon_64); 
    builder.setAutoCancel(true); 
    builder.setDefaults(android.app.Notification.DEFAULT_ALL); 


    Intent resultIntent = new Intent(context, SplashActivity.class); //Activity that you want to open 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    stackBuilder.addParentStack(SplashActivity.class);    // Activity that you want to open 
    stackBuilder.addNextIntent(resultIntent); 
    PendingIntent resultPendingIntent = 
      stackBuilder.getPendingIntent(
        0, 
        PendingIntent.FLAG_UPDATE_CURRENT 
      ); 
    builder.setContentIntent(resultPendingIntent); 
    return builder.getNotification(); 
} 
+0

первая часть ответа, где именно я должен называть это –

+0

, так что вы пробовали это –

+0

Прошу прощения. это (первая часть кода) внутри класса AlarmReciever OnRecieve void? –

1

Вам необходимо позвонить notify() после того, как вы настроили свое намерение на строителя, а не раньше. В противном случае уведомление, созданное builder.build(), не будет иметь этих намерений, когда оно будет добавлено в диспетчер уведомлений.

0

Вы должны setContentIntent для NotificationBuilder:

NotificationCompat.Builder builder = new NotificationCompat.Builder(
      context).setSmallIcon(R.drawable.app_icon) 
      .setContentTitle("Your Title").setContentText(""); 

    Intent intent = new Intent(context, YourMainActivity.class); 
    intent.setAction(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_LAUNCHER); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 100, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    builder.setContentIntent(pendingIntent); 
Смежные вопросы