I have two activities(one fragment and other activtiy) one to set alarm and the other to select tones. I'm using startActivityForResult() method but. in the main activity when I access the result it shows the expected result like this:
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == 1){
if (resultCode == RESULT_OK){
songPath = data.getStringExtra("SongName");
Log.d("Okay","song path :"+songPath);
}
}
}
but when I access the same stored in a global "songPath" variable then it shows null.
Log.d("Okay",""+songPath);
here's the code.
public class HomeFragment extends Fragment implements AlarmRecyclerViewListener,TimePickerDialog.OnTimeSetListener{
private String songPath;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home,container,false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//Getting a writable reference of the Database.
db = mAlarmsDBhelperClass.getWritableDatabase();
//Retrieving values from the database and storing them in custom ArrayLists
boolean isDataEmpty = getAlarm(db);
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == 1){
if (resultCode == RESULT_OK){
songPath = data.getStringExtra("SongName");
Log.d("Okay","song path :"+songPath);
}
}
}
public void startAlarm(Calendar c,int position,boolean isQuick,int requestCode){
if (!isQuick) {
//Getting a System service for the alarm to check the current time with the Alarm set time.
AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
//Creating an intent to invoke the onReceive method in the custom receiver class, just to display notifications.
Log.d("Okay",""+modeArrayList.get(position)+" "+songPath);
Intent intent = new Intent(getContext(), AlarmReceiver.class);
intent.putExtra("mode",modeArrayList.get(position));
intent.putExtra("songPath",songPath);
//A pending intent is used to execute some work in the future with our applications permissions.
PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(),requestCodes.get(position),intent,0);
//Now RTC_WAKEUP means if the device is Switched off turn it on.
//getTimeInMillis() will get get the time in Milliseconds
//Schedule an alarm to be delivered precisely at the stated time.In my case it's the calendar's getTimeMillis() method. which is providing the correct time in milliseconds.
alarmManager.setExact(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);
} else {
AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getContext(), AlarmReceiver.class);
Log.d("Okay",""+modeArrayList.get(position)+" "+songPath);
intent.putExtra("mode","quick");
PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(),requestCode,intent,0);
alarmManager.setExact(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);
}
}
}
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minute) {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
if (c.getTimeInMillis() < System.currentTimeMillis())
c.add(Calendar.DAY_OF_YEAR, 1);
Intent intent = new Intent(getContext(), RingtoneSelector.class);
startActivityForResult(intent,FRAGMENT_HOME_REQUEST_CODE);
mAlarmsDBhelperClass.insertAlarm("","⚡","",songPath,hour,minute,"ON",0,db);
startAlarm(c,0,true,quickHour+quickMin+1);
alarmAdapter.notifyDataSetChanged();
}
I'm getting null in the log cat when I access the songPath variable in the startAlarm() and onTimeSet()'s Log.d().