2017-12-13 13 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しかし、それは私のためには動作しません。

あなたは

EDIT解決策を探して

誰もが今の下にそれを見つけることができますありがとうございました。

答えて

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

はこのようにそれを受け取ります

関連する問題