반응형
Android 에서 주소록 연락처 창 노출 후 선택시 문자 전송하는 로직을 Java 오 Kotlin 버전으로 구현한 예제를
간략하게 작성하여 포스팅합니다.
전제 코드는 아니고 핵심이 되는 코드들만 넣어놨고
Native 는 클릭 이벤트시 메서드 호출 하이브리드는 JavascriptInterface
를 활용하여 호출해주세요.
시작되는 메서드는 startSMS()
입니다
# Ver. Java
public class ContactActivity extends AppCompatActivity {
private static final String TAG = ContactActivity.class.getSimpleName();
private String sendMsg = "";
//...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK) {
sendSMS(data, sendMsg);
}
super.onActivityResult(requestCode, resultCode, data);
}
private void startSMS() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setData(ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, 0);
}
private void sendSMS(Intent data, String msg) {
Cursor cursor = getContentResolver().query(data.getData(),
new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, null);
cursor.moveToFirst();
String name = cursor.getString(0); //0은 이름을 얻어옵니다.
String number = cursor.getString(1); //1은 번호를 받아옵니다.
cursor.close();
((TextView)findViewById(R.id.resMsg)).setText("name : " + name + " number : " + number);
Uri n = Uri.parse("smsto: " + number);
Intent intent = new Intent(Intent.ACTION_SENDTO, n);
intent.putExtra("sms_body", msg);
startActivity(intent);
}
public class JavaScriptInterface {
/**
*
*/
@JavascriptInterface
public void sendSMS(String msg) {
sendMsg = msg;
Toast.makeText( ContactActivity.this, msg, Toast.LENGTH_SHORT).show();
startSMS();
}
}
}
# Ver. Kotlin
class ContactActivity : AppCompatActivity() {
private var sendMsg = ""
//...
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK) {
sendSMS(data!!, sendMsg)
}
super.onActivityResult(requestCode, resultCode, data)
}
/**
* 주소록 검색
*/
private fun startSMS() {
val intent = Intent(Intent.ACTION_PICK)
intent.data = ContactsContract.CommonDataKinds.Phone.CONTENT_URI
startActivityForResult(intent, 0)
}
/**
* 문자 전송
*/
@SuppressLint("SetTextI18n")
private fun sendSMS(data: Intent, msg: String) {
with(contentResolver) {
query(
data.data, arrayOf(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER
), null, null, null
)
}?.apply {
moveToFirst()
val name = getString(0) //0은 이름을 얻어옵니다.
val number = getString(1) //1은 번호를 받아옵니다.
close()
(findViewById<View>(R.id.res_msg) as TextView).text = "name : $name number : $number"
val n = Uri.parse("smsto: $number")
val intent = Intent(Intent.ACTION_SENDTO, n)
intent.putExtra("sms_body", msg)
startActivity(intent)
}
}
inner class JavaScriptInterface {
/**
*
*/
@JavascriptInterface
fun sendSMS(msg: String) {
sendMsg = msg
startSMS()
Toast.makeText(this@ContactActivity, msg, Toast.LENGTH_SHORT).show()
}
}
}
참고 바랍니다.
감사합니다.
반응형
'Android' 카테고리의 다른 글
[Android/Error] aidl 컴파일 오류 (0) | 2019.12.13 |
---|---|
[Android/Error]error: illegal character: '\ufeff' ( illegal character 65279) (0) | 2019.12.13 |
[Android/Java] Retrofit 을 사용해보자 (0) | 2019.10.08 |
[Kotlin/Android] 갤러리 이미지 갱신 (0) | 2019.08.29 |
[Android/Kotlin] 정적 검사를 사용해보자 1 - 소나큐브(Sonarqube) (0) | 2019.07.31 |