2015-04-09 1 views
0

У меня есть эта проблема, когда я передаю данные из одной активности через широковещательную передачу во вторую активность, и когда я впервые ввожу текст, все идет отлично, но когда я возвращаюсь и вхожу другой текст, а затем последний текст остается неизменным. Я помещал тосты здесь и там, и кажется, что Broadcastreceiver не может изменить это значение String.BroadcastRecevier не хочет изменять значение

MainActivity:

public void setCall(int timeToCall){ 
    if (alarmManager!= null) { 
     alarmManager.cancel(pendingIntent); 
    } 
    String name = e1.getEditableText().toString(); 
    //Toast.makeText(getApplicationContext(), name, Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(MainActivity.this, ThisBroadcastReceiver.class); 
    intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
    intent.putExtra("name",name); 
    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0); 

    alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
      SystemClock.elapsedRealtime() + timeToCall, pendingIntent); 
} 

BroadcastReceiver:

@Override 
public void onReceive(Context context, Intent intent) { 
    String name = intent.getExtras().getString("name"); 

    Intent i = new Intent(context, CallScreen.class); 
    i.setClassName("(package)", "(classname)"); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.putExtra("name2", name); 
    context.startActivity(i); 
    Toast.makeText(context, name, Toast.LENGTH_SHORT).show(); 
} 

Вторая активность:

public class CallScreen extends Activity { 

TextView incomingCall, caller; 
MediaPlayer mp; 
String name; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_call_screen); 


    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     name = extras.getString("name2"); 
    } 

    incomingCall = (TextView) findViewById(R.id.textIncomingView); 
    caller = (TextView) findViewById(R.id.callerId); 
    caller.setText(name); 

    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    mp = MediaPlayer.create(getApplicationContext(), notification); 
    mp.start(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if (mp != null) { 
     mp.release(); 
     mp = null; 
    } 
    finish(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (mp != null) { 
     mp.release(); 
     mp = null; 
    } 
    finish(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (mp != null) { 
     mp.release(); 
     mp = null; 
    } 
    finish(); 
} 

ответ

2

Pending Intents кэшируются в Android. Если вы хотите повторно использовать ожидающее намерение с тем же идентификатором, вы должны его обновить:

pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
+0

О да, это сработало как шарм! Спасибо Спасибо спасибо! –

+0

добро пожаловать =) – user3390963

 Смежные вопросы

  • Нет связанных вопросов^_^