2013-01-06 19 views
1

我試圖通過意向發送額外服務,然後打開一個應該接收意圖的額外活動的服務。當我尋找它們時,額外項在第二個活動中顯示爲空,Android:如何從活動到服務獲得額外活動到第二個活動

這裏是代碼片段。

ToDoActivity.java片斷(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片斷(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(); 

} 

這種方法是在警報創建一個通知(另一個與額外問題有關的問題)這裏沒有顯示信息或者(因爲我傳遞信息從以前的方法來這裏)

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(); 
     } 

    } 

如果有人能請告訴我爲什麼我的演員沒有被調過來,那將是巨大的。

感謝, Vnge

+2

用Bundle b = getIntent()。getExtr替換這一行'Bundle b = savedInstanceState;'作爲();' –

+0

謝謝,真的幫助! – Vnge

回答

4

更改MyAlarmService onStartCommand方法,發送接收意圖值警報活動:

@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){ 

     } 

,並使用getIntent().getExtras()在警報活動在活動接收的意圖,而不是savedInstanceState

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); 

} 
+0

非常感謝!這真的有幫助!我無法相信我錯過了那個 – Vnge

+0

@Vnge:最受歡迎的朋友 –

相關問題