package nisrulz.github.sample.callsandsms;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.telephony.PhoneStateListener;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText etPhoneNo;
private Button btnDial;
private Button btnCall;
private TelephonyManager telephonyManager;
private EditText etMessage;
private Button btnSendMessage;
private Button btnSendMessageDirectly;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkIfPermissionGranted();
initView();
telephonyManager =
(TelephonyManager) getSystemService(getApplicationContext().TELEPHONY_SERVICE);
}
boolean isPermissionGranted(String permission) {
return ContextCompat.checkSelfPermission(MainActivity.this, permission)
== PackageManager.PERMISSION_GRANTED;
}
void checkIfPermissionGranted() {
if (isPermissionGranted(Manifest.permission.CALL_PHONE)
|| isPermissionGranted(Manifest.permission.SEND_SMS)
|| isPermissionGranted(Manifest.permission.RECEIVE_SMS)
|| isPermissionGranted(Manifest.permission.READ_PHONE_STATE)
|| isPermissionGranted(Manifest.permission.PROCESS_OUTGOING_CALLS)) {
// Request runtime permission
ActivityCompat.requestPermissions(this, new String[] {
Manifest.permission.CALL_PHONE, Manifest.permission.SEND_SMS,
Manifest.permission.RECEIVE_SMS, Manifest.permission.READ_PHONE_STATE,
Manifest.permission.PROCESS_OUTGOING_CALLS
}, 100);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
}
private void initView() {
etPhoneNo = (EditText) findViewById(R.id.et_phone_no);
btnDial = (Button) findViewById(R.id.btn_dial);
btnCall = (Button) findViewById(R.id.btn_call);
btnDial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String phoneNo = etPhoneNo.getText().toString();
if (!TextUtils.isEmpty(phoneNo)) {
String dial = "tel:" + phoneNo;
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(dial)));
}
else {
Toast.makeText(MainActivity.this, "Enter a phone number", Toast.LENGTH_SHORT).show();
}
}
});
btnCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String phoneNo = etPhoneNo.getText().toString();
if (!TextUtils.isEmpty(phoneNo)) {
String dial = "tel:" + phoneNo;
// Requires Permission to be declared in manifest
// <uses-permission android:name="android.permission.CALL_PHONE"/>
// Then check and request for permission during runtime
if (isPermissionGranted(Manifest.permission.CALL_PHONE)) {
startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(dial)));
}
else {
Toast.makeText(MainActivity.this, "Permission not granted yet!", Toast.LENGTH_SHORT)
.show();
}
}
else {
Toast.makeText(MainActivity.this, "Enter a phone number", Toast.LENGTH_SHORT).show();
}
}
});
etMessage = (EditText) findViewById(R.id.et_message);
btnSendMessage = (Button) findViewById(R.id.btn_send_message);
btnSendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String message = etMessage.getText().toString();
String phoneNo = etPhoneNo.getText().toString();
if (!TextUtils.isEmpty(message) && !TextUtils.isEmpty(phoneNo)) {
Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + phoneNo));
smsIntent.putExtra("sms_body", message);
startActivity(smsIntent);
}
}
});
btnSendMessageDirectly = (Button) findViewById(R.id.btn_send_message_directly);
btnSendMessageDirectly.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String message = etMessage.getText().toString();
String phoneNo = etPhoneNo.getText().toString();
if (!TextUtils.isEmpty(message) && !TextUtils.isEmpty(phoneNo)) {
// Requires Permission to be declared in manifest
// <uses-permission android:name="android.permission.SEND_SMS"/>
// Then check and request for permission during runtime
if (isPermissionGranted(Manifest.permission.SEND_SMS)) {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo, null, message, null, null);
}
else {
Toast.makeText(MainActivity.this, "Permission denied", Toast.LENGTH_SHORT).show();
}
}
}
});
}
@Override
protected void onResume() {
super.onResume();
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
@Override
protected void onStop() {
super.onStop();
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
}
// This listener only works when the app is in foreground
PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Toast.makeText(MainActivity.this, "CALL_STATE_IDLE : Detected in FG", Toast.LENGTH_SHORT)
.show();
break;
case TelephonyManager.CALL_STATE_RINGING:
Toast.makeText(MainActivity.this, "CALL_STATE_RINGING : Detected in FG",
Toast.LENGTH_SHORT).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(MainActivity.this, "CALL_STATE_OFFHOOK : Detected in FG",
Toast.LENGTH_SHORT).show();
break;
}
}
};
}