2014-09-15 2 views
0

ServiceActivity에서 문자열을 전달하는 동안 문제가 있습니다. 내가하려고하는 일은 Service을 호출 할 때마다 다른 문자열을 전달하는 것입니다. 매번 Intent (putExtra() 메서드 사용). 문제는 내가 통과 한 첫 번째 문자열을 보여줄 때마다 있다는 것입니다. 이를 구현할 수있는 방법이 있습니까?작업에서 서비스로 데이터 전달

여기가 마무리 될 때까지 나의 Activity, Broadcast Receiver,

public class MainActivity extends Activity implements View.OnClickListener{ 

private PendingIntent pendingIntent; 
private EditText event; 
private Button submit, date, time; 
private static final int DIALOG_DATE = 1; 
private static final int DIALOG_TIME = 2; 

private int myYear = 2014; 
private int myMonth = 8; 
private int myDay = 16; 
private int myHour = 6; 
private int myMinute = 30; 

private List<String> events; 
private List<Calendar> dateTimes; 


@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    event = (EditText)findViewById(R.id.event); 
    submit = (Button)findViewById(R.id.submit); 
    submit.setOnClickListener(this); 
    date = (Button)findViewById(R.id.date); 
    date.setOnClickListener(this); 
    time = (Button)findViewById(R.id.time); 
    time.setOnClickListener(this); 

    events = new ArrayList<String>(); 
    dateTimes = new ArrayList<Calendar>(); 

    //List<Calendar> events = new ArrayList<Calendar>(); 

} 

@Override 
protected Dialog onCreateDialog(int id) { 
    if(id == DIALOG_DATE) { 
     DatePickerDialog datePickerDialog = new DatePickerDialog(this, myCallBack, myYear, myMonth, myDay); 
     return datePickerDialog; 
    }else { 
     TimePickerDialog timePickerDialog = new TimePickerDialog(this, myCallBack1, myHour, myMinute, true); 
     return timePickerDialog; 
    } 
} 

DatePickerDialog.OnDateSetListener myCallBack = new DatePickerDialog.OnDateSetListener() { 
    @Override 
    public void onDateSet(DatePicker datePicker, int year, int month, int day) { 
     myYear = year; 
     myMonth = month; 
     myDay = day; 
    } 
}; 
TimePickerDialog.OnTimeSetListener myCallBack1 = new TimePickerDialog.OnTimeSetListener() { 
    @Override 
    public void onTimeSet(TimePicker timePicker, int hour, int minute) { 
     myHour = hour; 
     myMinute = minute; 
    } 
}; 

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.date: 
      showDialog(DIALOG_DATE); 
      break; 
     case R.id.time: 
      showDialog(DIALOG_TIME); 
      break; 
     case R.id.submit: 
      String eventS = event.getText().toString(); 

      Calendar calendar = Calendar.getInstance(); 

      calendar.set(Calendar.MONTH, myMonth); 
      calendar.set(Calendar.YEAR, myYear); 
      calendar.set(Calendar.DAY_OF_MONTH, myDay); 

      calendar.set(Calendar.HOUR_OF_DAY, myHour); 
      calendar.set(Calendar.MINUTE, myMinute); 
      calendar.set(Calendar.SECOND, 0); 
//    calendar.set(Calendar.AM_PM, Calendar.PM); 

      Intent myIntent = new Intent(MainActivity.this, BR.class); 
      myIntent.putExtra("event", eventS); 
      pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, 0); 

      AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
      alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); 
      event.setText(""); 
      break; 

    } 
} 

public class BR extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Intent myIntent = new Intent(context, MyService.class); 
    intent.getExtras().getString("event"); 
    myIntent.putExtra("event", intent.getStringExtra("event")); 

    context.startService(myIntent); 
    Log.i("myLogs", "BR started"); 
} 
} 

public class MyService extends Service { 

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

    mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE); 
    Intent intent1 = new Intent(this.getApplicationContext(),MainActivity.class); 
    String event = intent.getExtras().getString("event"); 

    Notification notification = new Notification(R.drawable.ic_launcher, "This is a test message!", System.currentTimeMillis()); 
    intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this.getApplicationContext(),0, intent1,PendingIntent.FLAG_UPDATE_CURRENT); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notification.setLatestEventInfo(this.getApplicationContext(), event, event, pendingNotificationIntent); 

    mManager.notify(0, notification); 
} 

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

} 
+1

항상 완료됩니다. 코드를 포함하지 않으면 잘못한 것을 말하기가 어렵습니다. – 323go

+0

@ 323go 여기 내 코드 – kg2152

+0

@ 323go 어떤 제안입니까? – kg2152

답변

-1

서비스 Service 중지 할 수 없습니다입니다. 다른 데이터를 보내려면 현재 서비스가 완료 될 때까지 기다려야합니다. 모든 문자열을 수집하여 함께 보내거나 백그라운드 서비스가 끝날 때까지 기다릴 수 있습니다.

관련 문제