I have a jpg image in the drawable resource and I want to pass that image from the MainActivity
to the AlarmReceiver
class and then to the FakeRinger
Activity. I have an option of "place a quick call" in my app and when the user press that option, the quickCall()
method triggers which is in the MainActivity
. I want to pick that image form the drawable and it should be pass from that method within the MainActivity
and send it to the AlarmReceiver
class and then to the FakeRinger
activity. Here's my code below:
MainActivity:
public class MainActivity extends AppCompatActivity {
public static final String LOG_TAG = "MainActivity";
ImageView imageView;
EditText number, name;
Button setTimeButton;
ImageButton imageButton;
TimePickerDialog timePicker;
long selectedTimeInMillis;
String enteredName, enteredNumber;
private static final int SELECT_IMAGE = 100;
public static final int REQUEST_CODE_PI = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PreferenceManager.setDefaultValues(this, R.xml.settings, false);
imageView = findViewById(R.id.image_view);
setTimeButton = findViewById(R.id.set_time);
imageButton = findViewById(R.id.place_call_button);
number = findViewById(R.id.number);
name = findViewById(R.id.name);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, SELECT_IMAGE);
}
});
setTimeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
timePicker = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
selectedTimeInMillis = calendar.getTimeInMillis();
if (hourOfDay > 12) {
hourOfDay = hourOfDay - 12;
}
Toast.makeText(MainActivity.this, hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show();
Log.v(LOG_TAG, "Selected time in millis:" + selectedTimeInMillis);
}
}, hour, minute, false);
timePicker.show();
}
});
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
enteredName = name.getText().toString().trim();
enteredNumber = number.getText().toString().trim();
if (enteredNumber.isEmpty()){
Toast.makeText(MainActivity.this, "Please enter a number", Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent(MainActivity.this, AlarmReciever.class);
intent.putExtra("FAKE_NAME", enteredName);
intent.putExtra("FAKE_NUMBER", enteredNumber);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(getApplicationContext(), REQUEST_CODE_PI, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
if (alarmManager != null) {
alarmManager.set(AlarmManager.RTC_WAKEUP, selectedTimeInMillis, pendingIntent);
Toast.makeText(MainActivity.this, "Your call has been placed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Error: something wrong", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
Intent intent = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(intent);
return true;
case R.id.quick_call:
quickCall();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = null;
if (selectedImage != null) {
cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
}
if (cursor != null) {
cursor.moveToFirst();
}
int columnIndex = 0;
if (cursor != null) {
columnIndex = cursor.getColumnIndex(filePathColumn[0]);
}
String picturePath = null;
if (cursor != null) {
picturePath = cursor.getString(columnIndex);
}
if (cursor != null) {
cursor.close();
}
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
}
public void quickCall(){
enteredName = getString(R.string.quick_fake_name);
enteredNumber = getString(R.string.quick_fake_number);
Calendar calendar = Calendar.getInstance();
calendar.get(Calendar.HOUR_OF_DAY);
calendar.get(Calendar.MINUTE);
long millis = calendar.getTimeInMillis();
Intent quickCallIntent = new Intent(MainActivity.this, AlarmReciever.class);
quickCallIntent.putExtra("FAKE_NAME", enteredName);
quickCallIntent.putExtra("FAKE_NUMBER", enteredNumber);
PendingIntent quickCallPendingIntent =
PendingIntent.getBroadcast(getApplicationContext(), REQUEST_CODE_PI, quickCallIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
if (alarmManager != null) {
alarmManager.set(AlarmManager.RTC_WAKEUP, millis + 10000, quickCallPendingIntent);
Toast.makeText(MainActivity.this, "Your call has been placed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Error: something wrong", Toast.LENGTH_SHORT).show();
}
}
}
AlarmReceiver class:
public class AlarmReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String getFakeName = intent.getStringExtra("FAKE_NAME");
String getFakeNumber = intent.getStringExtra("FAKE_NUMBER");
Intent fakeRinger = new Intent();
fakeRinger.setClassName("com.example.mani.fakecall", "com.example.mani.fakecall.FakeRinger");
fakeRinger.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
fakeRinger.putExtra("USER_FAKE_NAME", getFakeName);
fakeRinger.putExtra("USER_FAKE_NUMBER", getFakeNumber);
context.startActivity(fakeRinger);
if(getFakeName != null){
Log.v("Fake name is", getFakeName);
}
if(getFakeNumber != null){
Log.v("Fake number is", getFakeNumber);
}
}
}
FakeRinger activity:
public class FakeRinger extends AppCompatActivity {
TextView displayName, displayNumber, displayCarrier;
ImageButton alarmOffButton;
String carrierName;
ImageView displayImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fake_ringer);
displayName = findViewById(R.id.display_name);
displayNumber = findViewById(R.id.display_number);
displayCarrier = findViewById(R.id.network_operator);
displayImage = findViewById(R.id.display_image);
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if (telephonyManager != null) {
carrierName = telephonyManager.getNetworkOperatorName();
}
if (carrierName != null) {
displayCarrier.setText(getResources().getString(R.string.incoming_call, carrierName));
} else {
displayCarrier.setText(getResources().getString(R.string.incoming_call));
}
Intent intent = getIntent();
String userFakeNumber = intent.getStringExtra("USER_FAKE_NUMBER");
displayNumber.setText(userFakeNumber);
displayName.setText(getFakeName());
alarmOffButton = findViewById(R.id.hang_up_call);
alarmOffButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
stopService(intent);
if (alarmManager != null) {
alarmManager.cancel(pendingIntent);
}
}
});
}
private String getFakeName(){
String contacName;
Intent intent = getIntent();
contacName = intent.getStringExtra("USER_FAKE_NAME");
if (contacName.isEmpty()){
contacName = getString(R.string.unknown_name);
}
return contacName;
}
}
I have searched a lot about this problem but still no solution.