Trung tâm Tin học – ĐH KHTN
Gữi và nhận tin nhắn
Có nhiều ứng dụng đòi hỏi nhắn tin tự động cho 1 điện thoại khác hay nhận tin nhắn từ
1 điện thoại khác. Trong bài viết này mình sẽ làm 1 ứng dụng dùng để nhắn tin và 1
ứng dụng dùng để đọc bất cứ tin nhắn nào nhắn đến máy mình.
+ Ứng dụng nhắn tin làm theo các bước sau:
1/ Tạo Project :
Project name: TelephonyDemo
Build Target: Android 2.3.3
Application name: TelephonyDemo
Package name: com.dac.TelephonyDemo
Create Activity: TelephonyDemo
2/ Trong file main.xml các bạn thiết kế như sau:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" />android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout xmlns:android=" />android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Destination
Address:" />
<EditText android:id="@+id/addrEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:phoneNumber="true" android:text="" />
</LinearLayout>
<LinearLayout xmlns:android=" />android:orientation="vertical" android:layout_width="fill_parent"
Lập trình Android – Page 1
Trung tâm Tin học – ĐH KHTN
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Text Message:"
/>
<EditText android:id="@+id/msgEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="hello sms" />
</LinearLayout>
<Button android:id="@+id/sendSmsBtn" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Send Text Message"
android:onClick="doSend" />
</LinearLayout>
3/ Trong Package các bạn tạo thêm 1 class MySMSMonitor.java :
package com.dac.TelephonyDemo
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.util.Log;
public class MySMSMonitor extends BroadcastReceiver {
private static final String ACTION =
"android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent)
{
if(intent!=null && intent.getAction()!=null &&
ACTION.compareToIgnoreCase(intent.getAction())==0)
{
Object[]pduArray = (Object[]) intent.getExtras().get("pdus");
SmsMessage[] messages = new SmsMessage[pduArray.length];
for (int i = 0; i<pduArray.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])pduArray [i]);
Log.d("MySMSMonitor", "From: " +
messages[i].getOriginatingAddress());
Log.d("MySMSMonitor", "Msg: " + messages[i].getMessageBody());
}
Log.d("MySMSMonitor","SMS Message Received.");
}
}
}
Lập trình Android – Page 2
Trung tâm Tin học – ĐH KHTN
4/ trong file TelephonyDemo.java ta code như sau:
package com.dac.TelephonyDemo
import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class TelephonyDemo extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void doSend(View view) {
EditText addrTxt =
(EditText)findViewById(R.id.addrEditText);
EditText msgTxt =
(EditText)findViewById(R.id.msgEditText);
try {
sendSmsMessage(
addrTxt.getText().toString(),
msgTxt.getText().toString());
Toast.makeText(this, "SMS Sent",
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(this, "Failed to send SMS",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
private void sendSmsMessage(String address,String message)throws Exception
{
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage(address, null, message, null, null);
}
}
Lập trình Android – Page 3
Trung tâm Tin học – ĐH KHTN
Và thêm nữa trong file AndroidManifest.xml ta thêm vào Permission cho phép nhận và
gữi SMS:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=" />package="com.dac.TelephonyDemo" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".TelephonyDemo"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<receiver android:name="MySMSMonitor">
<intent-filter>
<action
android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
</manifest>
Vậy ta đã làm xong ứng dụng gữi tin nhắn. Ta làm tiếp ứng dụng nhận tin nhắn như
sau:
1/Các bạn tạo 1 Project:
Project name: SMSFolders
Build Target: Android 2.3.3
Application name: SMSFolders
Package name: com.dac.SMSFolders
Create Activity: SMSInboxDemo
Lập trình Android – Page 4
Trung tâm Tin học – ĐH KHTN
2/ Các bạn đổi tên file layout main.xml lại thành sms_inbox.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" /> android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/row"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
3/ Các bạn code file chính SMSInboxDemo.java như sau:
package com.dac.SMSFolders;
import android.app.ListActivity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;
public class SMSInboxDemo extends ListActivity {
private ListAdapter adapter;
private static final Uri SMS_INBOX = Uri.parse("content://sms/inbox");
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
Cursor c = getContentResolver()
.query(SMS_INBOX, null, null, null, null);
startManagingCursor(c);
String[] columns = new String[] { "body" };
int[] names = new int[] { R.id.row };
adapter = new SimpleCursorAdapter(this, R.layout.sms_inbox, c, columns,
names);
setListAdapter(adapter);
}
}
Và tương tự ứng dụng trên các bạn cũng thêm Permission vào AndroidManifest.xml:
Lập trình Android – Page 5
Trung tâm Tin học – ĐH KHTN
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=" /> package="com.dac.SMSFolders"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SMSInboxDemo"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
</manifest>
Cuối cùng các bạn debug ứng dụng trên 2 Virtual Devices khác nhau và xem kết quả:
Gữi:
Lập trình Android – Page 6
Trung tâm Tin học – ĐH KHTN
Nhận:
Lập trình Android – Page 7
Trung tâm Tin học – ĐH KHTN
Mọi ý kiến đóng góp các bạn vui lòng gữi bài viết về . Rất
mong nhận được sự phản hồi từ các bạn
Lập trình Android – Page 8