Pregunta

I am trying to send extras through an intent to a service which then opens an activity that should receive the intent's extras. The extras appear to be null in the second activity when I look for them,

here are snippets of the code.

ToDoActivity.java snippet (ACTIVITY)

public void sendNotification(String title, String body){
        Calendar c= Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
        c.set(mYear, mMonth, mDay, mhour, mminute, 0);


        Intent intent = new Intent(this, MyAlarmService.class);
        intent.putExtra(TO_DO_ITEM, body);
        intent.putExtra(TO_DO_NAME, title);
        intent.putExtra(TO_DO_TIME, c.getTimeInMillis());
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

        PendingIntent mAlarmSender = PendingIntent.getService(ToDoActivity.this,  0, intent, 0);

        AlarmManager alm = (AlarmManager)getSystemService(ALARM_SERVICE);

        alm.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), mAlarmSender);
        Toast.makeText(this, "Alarm has been set for: " + body, Toast.LENGTH_LONG).show();

    }

MyAlarmService.java (SERVICE)

@Override
    public int onStartCommand(Intent intent, int flags, int startId){
        super.onStartCommand(intent, flags, startId);

        Intent alert = new Intent();
        try{
            alert.putExtras(intent);
        }catch(NullPointerException npe){

        }

        alert.setClass(this, Alert.class);
        alert.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(alert);

        return START_REDELIVER_INTENT;
    }

Alert.java Snippets (ACTIVITY)

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);


    Builder alert = new AlertDialog.Builder(this);

    Intent i = new Intent();

    Bundle b = savedInstanceState;
    String title="";
    String itemToDo="";
    long time =0;
    try{
        title = b.getString(ToDoActivity.TO_DO_NAME);
        itemToDo = b.getString(ToDoActivity.TO_DO_ITEM);
        time = b.getLong(ToDoActivity.TO_DO_TIME);
    }catch (NullPointerException npe){
        try{
            title = i.getStringExtra(ToDoActivity.TO_DO_NAME);
            itemToDo = i.getStringExtra(ToDoActivity.TO_DO_ITEM);
            time = i.getLongExtra(ToDoActivity.TO_DO_TIME, System.currentTimeMillis());

        }catch(NullPointerException npe2){

        }
    }
    if((!title.equals("") && !itemToDo.equals("") && time !=0))
        makeNotif(title, itemToDo, time);
    alert.setTitle("Alert: Do the item on your to do list!!");
    if(!itemToDo.equals(""))
        alert.setMessage(itemToDo);
    else
        alert.setMessage("There is an item on your To Do List that needs to get done, please check the list and the time");
    alert.setPositiveButton("OK", new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which) {
            mp.stop();
            finish();

        }
    });


    playSound(this, getAlarmUri());
    alert.setIcon(R.drawable.ic_launcher);

    AlertDialog ad = alert.create();
    ad.show();

}

This method is in Alert to create a notification (Another issue pertaining to the extras) The info is not being shown through here either (Since I pass info from the previous method to here)

static final int uniqueid= 139686;
    public void makeNotif(String title, String body, long timeInMil){
        try{
            NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            Intent intent = new Intent(this, ToDoActivity.class);

            final String itemToDo=intent.getStringExtra("TDL");
            //          final String title = b.getString("Name");
            final String titleA = intent.getStringExtra("Name");
            //          final long time = b.getLong("Time");
            final long time =intent.getLongExtra("Time",0);

            PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
            //Notification n = new Notification(0, body, System.currentTimeMillis());

            //Notifaction n = Notification

            Notification n = new Notification.Builder(this)
            .setContentTitle(title)
            .setContentText(body)
            //.setContentTitle(titleA)
            //.setContentText(itemToDo)
            .setSmallIcon(R.drawable.ic_launcher)
            .setWhen(timeInMil)
            .build();


            //n.setLatestEventInfo(this, title, body, pi);
            n.defaults=Notification.DEFAULT_ALL;
            n.flags = Notification.FLAG_AUTO_CANCEL;
            nm.notify(uniqueid, n);

        }catch(Exception e){
            e.printStackTrace();
        }

    }

If someone could please inform me on why my extras aren't being transferred over, that would be great.

Thanks, Vnge

¿Fue útil?

Solución

Change your MyAlarmService onStartCommand method as for sending received intent value to Alert Activity :

@Override
    public int onStartCommand(Intent intent, int flags, int startId){
        super.onStartCommand(intent, flags, startId);

        Intent alert = new Intent();
        try{
            alert.putExtra(TO_DO_ITEM, intent.getExtras().getString(TO_DO_ITEM));
            alert.putExtra(TO_DO_NAME, intent.getExtras().getString(TO_DO_NAME));
            alert.putExtra(TO_DO_TIME, intent.getExtras().getLong(TO_DO_TIME));
        }catch(NullPointerException npe){

        }

and use getIntent().getExtras() for receiving intent in Activity instead of savedInstanceState in Alert activity as:

Bundle b = getIntent().getExtras();

 if(b !=null){
 title = b.getString(TO_DO_ITEM);
 itemToDo = b.getString(TO_DO_NAME);
 time = b.getLong(TO_DO_TIME);

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top