2017-12-13 6 views
-4

클래스가 public class Alarm implements Serializable입니다. 여기에 방법이 있습니다 :액티비티에서 일련 번호 묶음을 가져올 수 없습니다.

public void schedule(Context context) { 
    setAlarmActive(true); 

    Intent myIntent = new Intent(context, AlarmAlertBroadcastReciever.class); 

    Bundle bundle = new Bundle(); 
    bundle.putSerializable("alarm", this); 
    myIntent.putExtras(bundle); 
    //myIntent.putExtra("alarm", this); 

    Alarm alarm = (Alarm) bundle.getSerializable("alarm"); 

    if(alarm !=null){ 
     Log.d("Alarmdebug", "alatm is not null"); 
    } 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent,PendingIntent.FLAG_CANCEL_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 

    alarmManager.set(AlarmManager.RTC_WAKEUP, getAlarmTime().getTimeInMillis(), pendingIntent);     
} 

다른 곳에서는이 코드가 있습니다. 어떤 serialized 엑스트라를 얻을 수 없습니다. 이것은 호출되지만 alarm은 항상 null입니다.

Bundle bundle = intent.getExtras(); 

    final Alarm alarm = (Alarm) bundle.getSerializable("alarm"); 

    if(alarm==null){ 
     Log.d("Alarmdebug", "alarm is null 2"); 
    } 

이 코드의 문제점은 무엇입니까? 나는 해결책을 여기에서 시도했다 : Passing data through intent using Serializable 그러나 저를 위해 작동하지 않는다.

편집 솔루션을 찾고

누구나 지금보다 그것을 찾을 수 있습니다 감사합니다.

답변

0

직렬화 된 번들이 일부 장치에서 작동하지 않는 것 같습니다.

Pass Serializable Object to Pending Intent

이처럼 보내기 : 대답 여기

byte[]에로했다

//AlarmAlertBroadcastReceiver.java 

@Override 
public void onReceive(Context context, Intent intent) { 
    ByteArrayInputStream bis = new ByteArrayInputStream(intent.getByteArrayExtra("alarm")); 
    ObjectInput in = null; 
    Alarm alarm = null; 
    try { 
     in = new ObjectInputStream(bis); 
     alarm = (Alarm)in.readObject(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (in != null) { 
       in.close(); 
      } 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
:

//AlarmService.java 
Intent myIntent = new Intent(getApplicationContext(), AlarmAlertBroadcastReciever.class); 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutputStream out = null; 
try { 
    out = new ObjectOutputStream(bos); 
    out.writeObject(alarm); 
    out.flush(); 
    byte[] data = bos.toByteArray(); 
    myIntent.putExtra("alarm", data); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     bos.close(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT); 

AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, alarm.getAlarmTime().getTimeInMillis(), pendingIntent); 

이처럼 수신