2017-04-07 202 views
1

在我的应用程序中,一个警报创建了一个可用的通知,但我试图将一个字符串值从我的主类FoodItems.java传递给AlarmReceiver.java,然后将该字符串传递给RingtoneServiceProvider.java,要显示的自定义通知。因为它看起来成功传递到AlarmReceiver.java中,因为我有一个Toast消息显示它在之前看到,但是当它进入RingtoneServiceProvider.java时它变成“null”。在3个活动之间传递值

这是FoodItems.java的一部分,其中字符串值'name'是由用户输入的值,我想在通知中显示该值。

private void setAlarm(Calendar targetCal){ 

    Toast.makeText(getApplicationContext(), 
      "Alarm is set for " + targetCal.getTime(),Toast.LENGTH_LONG).show(); 

    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 
    intent.putExtra("data",name); 
    intent.putExtra("ID", Alarmnum); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(),Alarmnum,intent, 0); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); 

} 

这是AlarmReceiver.java

package com.example.kev00_000.kitchenhero; 

import android.app.NotificationManager; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class AlarmReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

    String name = intent.getStringExtra("data"); 
    int id = intent.getIntExtra("ID", 1); 
    Intent service_intent=new Intent(context, RingtonePlayingService.class); 
    service_intent.putExtra("data",name); 
    service_intent.putExtra("ID", id); 
    context.startService(service_intent); 
    NotificationManager notifications = (NotificationManager) 
      context.getSystemService(Context.NOTIFICATION_SERVICE); 
} 
} 

这里是RingtonePlayingService.java

import android.os.IBinder; 
import android.support.annotation.Nullable; 
import android.support.v4.app.NotificationCompat; 



public class RingtonePlayingService extends Service { 

MediaPlayer alarm; 
private String name; 
private static int NOTIFICATION_ID = 1; 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    name = intent.getStringExtra("data"); 
    NOTIFICATION_ID = intent.getIntExtra("ID", 1); 
    return null; 
} 

public void onCreate(){ 
    super.onCreate(); 
    alarm=MediaPlayer.create(this, R.raw.alarmclockbuzz); 
    alarm.setLooping(true); 

    Intent stopself = new Intent(this, StopAlarm.class); 
    PendingIntent pendingIntent 
      = PendingIntent.getBroadcast(this, 0, stopself, PendingIntent.FLAG_CANCEL_CURRENT); 

    final NotificationCompat.Builder notification 
      = new NotificationCompat.Builder(getApplicationContext()) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setOngoing(true) 
      .setContentTitle("KitchenHero") 
      .setContentText("Time to put your "+name+" on!!") 
      .setAutoCancel(true) 
      .setPriority(NotificationCompat.PRIORITY_HIGH) 
      .setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 }) 
      .addAction(R.drawable.ic_launcher, "STOP", pendingIntent); 

    Notification note=notification.build(); 


    startForeground(NOTIFICATION_ID, note); 
} 

public int onStartCommand(Intent intent, int flags, int startId) { 

    alarm.start(); 
    return START_NOT_STICKY; 
} 


public void onDestroy() { 
    alarm.stop(); 
    alarm.release(); 
} 

回答

2

使用共享偏好做到这一点

public static final String MyPREFERENCES = "MyPrefs" ; 
SharedPreferences sharedpreferences; 
private void setAlarm(Calendar targetCal){ 
    sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedpreferences.edit(); 
    editor.putString("name",name); 
    editor.putString("ID",ID); 
    editor.commit(); 

    Toast.makeText(getApplicationContext(), 
      "Alarm is set for " + targetCal.getTime(),Toast.LENGTH_LONG).show(); 

    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(),Alarmnum,intent, 0); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); 

} 

并获得字符串在其他类

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
    String name = preferences.getString("name", ""); 
+0

非常感谢,得到它的工作 – user1854335

+0

@ user1854335请接受我答,请给予好评 –

+0

我,但因为我有不到15声誉“它不会改变公开展示后分数”为给予好评。或者我被告知:P再次感谢 – user1854335