So tätigen Sie Anrufe und verwenden SMS in Android-Apps
German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)
In diesem Tutorial erfahren Sie mehr über die Android-Telefonie- und SMS-API. Sie erfahren, wie Sie über Ihre App einen Anruf tätigen und Telefonanrufereignisse überwachen sowie SMS senden und empfangen.
1. So tätigen Sie einen Anruf
Zu Beginn zeige ich Ihnen, wie Sie einen Anruf über Ihre Anwendung entweder über die Telefonwähler-App oder direkt über Ihre App einleiten können, um es Ihren Benutzern zu erleichtern.
Erstellen Sie ein neues Android Studio-Projekt
Starten Sie Android Studio und erstellen Sie ein neues Projekt mit einer leeren Aktivität namens MainActivity.
Den Bildschirm auslegen
Im Moment hat unser Layout nur ein EditText-Feld und eine Wähltaste:
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<LinearLayout
|
3 |
xmlns:android="https://schemas.android.com/apk/res/android" |
4 |
xmlns:tools="http://schemas.android.com/tools" |
5 |
android:id="@+id/activity_main" |
6 |
android:orientation="vertical" |
7 |
android:layout_width="match_parent" |
8 |
android:layout_height="match_parent" |
9 |
android:paddingLeft="@dimen/activity_horizontal_margin" |
10 |
android:paddingRight="@dimen/activity_horizontal_margin" |
11 |
android:paddingTop="@dimen/activity_vertical_margin" |
12 |
android:paddingBottom="@dimen/activity_vertical_margin" |
13 |
android:gravity="center_horizontal|center_vertical" |
14 |
tools:context="com.chikeandroid.tutsplust_telephony.MainActivity"> |
15 |
|
16 |
<EditText
|
17 |
android:id="@+id/et_phone_no" |
18 |
android:hint="Enter Phone number" |
19 |
android:inputType="phone" |
20 |
android:layout_width="match_parent" |
21 |
android:layout_height="wrap_content"/> |
22 |
|
23 |
<Button
|
24 |
android:id="@+id/btn_dial" |
25 |
android:layout_gravity="center_horizontal" |
26 |
android:text="Dial" |
27 |
android:layout_width="wrap_content" |
28 |
android:layout_height="wrap_content"/> |
29 |
</LinearLayout>
|



Ändern Sie die MainActivity-Klasse
Im Codeblock unten erstellen wir einen ACTION_DIAL-Intent, um den Telefonwähler anzuzeigen. Die Telefonnummer wird von unserem tel-URI-Schema geparst: tel:XXXXXXXX. Beachten Sie, dass Sie dafür keine Berechtigung benötigen:
1 |
import android.content.Intent; |
2 |
import android.net.Uri; |
3 |
import android.os.Bundle; |
4 |
import android.support.v7.app.AppCompatActivity; |
5 |
import android.text.TextUtils; |
6 |
import android.view.View; |
7 |
import android.widget.Button; |
8 |
import android.widget.EditText; |
9 |
import android.widget.Toast; |
10 |
|
11 |
public class MainActivity extends AppCompatActivity { |
12 |
|
13 |
@Override
|
14 |
protected void onCreate(Bundle savedInstanceState) { |
15 |
super.onCreate(savedInstanceState); |
16 |
setContentView(R.layout.activity_main); |
17 |
Button mDialButton = (Button) findViewById(R.id.btn_dial); |
18 |
final EditText mPhoneNoEt = (EditText) findViewById(R.id.et_phone_no); |
19 |
|
20 |
mDialButton.setOnClickListener(new View.OnClickListener() { |
21 |
@Override
|
22 |
public void onClick(View view) { |
23 |
String phoneNo = mPhoneNoEt.getText().toString(); |
24 |
if(!TextUtils.isEmpty(phoneNo)) { |
25 |
String dial = "tel:" + phoneNo; |
26 |
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(dial))); |
27 |
}else { |
28 |
Toast.makeText(MainActivity.this, "Enter a phone number", Toast.LENGTH_SHORT).show(); |
29 |
}
|
30 |
}
|
31 |
});
|
32 |
}
|
33 |
}
|
Wenn Sie die App ausführen und auf die Wählschaltfläche klicken, werden Sie zur Wähl-App weitergeleitet und müssen von dort aus die Nummer wählen. Sie können diesen Ablauf ändern, um den Anruf tatsächlich von Ihrer App aus zu tätigen, indem Sie stattdessen einfach den Intent ACTION_DIAL in ACTION_CALL ändern. Dies erfordert jedoch die Berechtigung android.permission.CALL_PHONE.



2. Überwachung von Telefonanrufereignissen
In diesem Abschnitt erfahren Sie, wie Sie Telefonanrufereignisse im Android-System überwachen. Das Telefon kann sich in drei Zuständen befinden:
- idle (wenn es nicht benutzt wird)
- ringing (bei eingehendem Anruf)
- off-hook (wenn der Anruf entgegengenommen wird)
Berechtigung hinzufügen
Wir benötigen die Berechtigung READ_PHONE_STATE, um den Telefonstatus überwachen zu können. Fügen Sie es zu AndroidManifest.xml hinzu:
1 |
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> |
Erstellen Sie das PhoneStateListener-Objekt
Wir erstellen ein Objekt der PhoneStateListener-Klasse und überschreiben dann seine onCallStateChanged()-Methode (in IntelliJ ist dies einfach mit Control-O zu tun und dann die zu überschreibende Methode auszuwählen oder zu suchen). Wir behandeln Änderungen an den Anrufstatusänderungen, indem wir einen Toast anzeigen. Beachten Sie, dass wir auch auf die eingehenden Telefonnummern zugreifen können, wenn diese Methode ausgelöst wird:
1 |
// ...
|
2 |
PhoneStateListener mPhoneStateListener = new PhoneStateListener() { |
3 |
@Override
|
4 |
public void onCallStateChanged(int state, String incomingNumber) { |
5 |
super.onCallStateChanged(state, incomingNumber); |
6 |
|
7 |
switch (state) { |
8 |
case TelephonyManager.CALL_STATE_IDLE: |
9 |
Toast.makeText(MainActivity.this, "CALL_STATE_IDLE", Toast.LENGTH_SHORT).show(); |
10 |
break; |
11 |
case TelephonyManager.CALL_STATE_RINGING: |
12 |
Toast.makeText(MainActivity.this, "CALL_STATE_RINGING", Toast.LENGTH_SHORT).show(); |
13 |
break; |
14 |
case TelephonyManager.CALL_STATE_OFFHOOK: |
15 |
Toast.makeText(MainActivity.this, "CALL_STATE_OFFHOOK", Toast.LENGTH_SHORT).show(); |
16 |
break; |
17 |
}
|
18 |
}
|
19 |
};
|
20 |
// ...
|
Abhängig von Ihren Anwendungsanforderungen können Sie auch eine dieser anderen Ereignismethoden überschreiben: onCellInfoChanged(), onCallForwardingIndicatorChanged(), onCellLocationChanged() oder onSignalStrengthChanged().
Anhören des Anrufstatus
Um mit dem Abhören des Anrufstatus zu beginnen, müssen wir den TelephonyManager vom Systemdienst abrufen und in onCreate() initialisieren.
1 |
// ...
|
2 |
private TelephonyManager mTelephonyManager; |
3 |
@Override
|
4 |
protected void onCreate(Bundle savedInstanceState) { |
5 |
// ...
|
6 |
mTelephonyManager = (TelephonyManager) getSystemService(getApplicationContext().TELEPHONY_SERVICE); |
7 |
}
|
In der Methode onResume() können wir mit dem Hören beginnen, indem wir die Methode TelephonyManager listen() verwenden, indem wir ihr die PhoneStateListener-Instanz und den statischen LISTEN_CALL_STATE übergeben. Wir beenden das Zuhören in der Methode onStop(), indem wir LISTEN_NONE als zweites Argument an listen() übergeben.
1 |
// ...
|
2 |
@Override
|
3 |
protected void onResume() { |
4 |
super.onResume(); |
5 |
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); |
6 |
}
|
7 |
@Override
|
8 |
protected void onStop() { |
9 |
super.onStop(); |
10 |
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); |
11 |
}
|
12 |
// ...
|
Andere mögliche Telefonhöroptionen sind LISTEN_CELL_LOCATION, LISTEN_SIGNAL_STRENGTH, LISTEN_CALL_FORWARDING_INDICATOR und LISTEN_CELL_INFO.
Führen Sie abschließend die App aus und stellen Sie sicher, dass ein eingehender Anruf eingeht.



Diese Überwachung funktioniert nur, wenn sich die App im Vordergrund befindet. Damit dies im Hintergrund funktioniert (wenn unsere Anwendung nicht ausgeführt wird), müssen wir einen BroadcastReceiver erstellen, damit wir auch dann, wenn die App nicht ausgeführt wird, den Status von Telefonanrufen überwachen können. Abhängig von Ihren App-Anforderungen kann dies eine viel bessere Möglichkeit sein, um auf Änderungen des Anrufstatus zu achten. Wie das geht, zeige ich Ihnen im nächsten Abschnitt.
Beachten Sie, dass wir nur eingehende Anrufe überwachen. Damit wir ausgehende Anrufe überwachen können, benötigen wir zusätzliche Berechtigungen. Um ausgehende Anrufe zu überwachen, fügen Sie die folgende Zeile in Ihre AndroidManifest.xml-Datei ein.
1 |
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> |
So verwenden Sie den Emulator, um Anrufe zu tätigen und SMS-Nachrichten zu senden Message
Sie können Ihren Emulator verwenden, um einen Anruf oder das Senden einer SMS-Nachricht zu simulieren, aber Sie müssen ein wenig einrichten. Öffnen Sie Ihren Emulator, klicken Sie auf die letzte Schaltfläche in der rechten Navigationsleiste, um den erweiterten Steuerungsdialog zu öffnen, und wählen Sie dann die Telefonsteuerungsschaltfläche aus.



3. Überwachung von Telefonanrufereignissen im Hintergrund
Erstellen Sie einen BroadcastReceiver
Genau wie im vorherigen Abschnitt müssen wir einen Ereignis-Listener erstellen, um Änderungen des Telefonstatus zu überwachen. Der Hauptunterschied besteht darin, dass wir diesmal die BroadcastReceiver-Basisklasse erweitern, sodass wir auch dann auf den Anrufstatus achten können, wenn die Anwendung nicht ausgeführt wird. Achten Sie darauf, den Hörer nicht mehr als einmal zu registrieren! Unser Scheck dafür ist in Zeile 36.
1 |
import android.content.BroadcastReceiver; |
2 |
import android.content.Context; |
3 |
import android.content.Intent; |
4 |
import android.telephony.PhoneStateListener; |
5 |
import android.telephony.TelephonyManager; |
6 |
import android.widget.Toast; |
7 |
|
8 |
public class PhoneCallStateReceiver extends BroadcastReceiver { |
9 |
private TelephonyManager mTelephonyManager; |
10 |
public static boolean isListening = false; |
11 |
|
12 |
@Override
|
13 |
public void onReceive(final Context context, Intent intent) { |
14 |
|
15 |
mTelephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE); |
16 |
|
17 |
PhoneStateListener mPhoneStateListener = new PhoneStateListener() { |
18 |
@Override
|
19 |
public void onCallStateChanged(int state, String incomingNumber) { |
20 |
super.onCallStateChanged(state, incomingNumber); |
21 |
|
22 |
switch (state) { |
23 |
case TelephonyManager.CALL_STATE_IDLE: |
24 |
Toast.makeText(context, "CALL_STATE_IDLE", Toast.LENGTH_SHORT).show(); |
25 |
break; |
26 |
case TelephonyManager.CALL_STATE_RINGING: |
27 |
Toast.makeText(context, "CALL_STATE_RINGING", Toast.LENGTH_SHORT).show(); |
28 |
break; |
29 |
case TelephonyManager.CALL_STATE_OFFHOOK: |
30 |
Toast.makeText(context, "CALL_STATE_OFFHOOK", Toast.LENGTH_SHORT).show(); |
31 |
break; |
32 |
}
|
33 |
}
|
34 |
};
|
35 |
|
36 |
if(!isListening) { |
37 |
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); |
38 |
isListening = true; |
39 |
}
|
40 |
}
|
41 |
}
|
Ändern Sie AndroidManifest.xml
Ein Rundfunkempfänger funktioniert nur, wenn er registriert ist. Wir müssen dem Android-System unseren Broadcast-Empfänger mitteilen, indem wir ihn in der Datei AndroidManifest.xml registrieren, indem wir unsere PhoneCallStateReceiver-Klasse mit dem <intent-filter> verbinden, der den System-Broadcast beschreibt, den wir empfangen möchten – in diesem Fall PHONE_STATE.
1 |
<receiver android:name=".PhoneCallStateReceiver"> |
2 |
<intent-filter>
|
3 |
<action android:name="android.intent.action.PHONE_STATE"/> |
4 |
</intent-filter>
|
5 |
</receiver>
|
Ausgehende Anrufe überwachen
Bei ausgehenden Anrufen müssen Sie die Aktionsabsicht NEW_OUTGOING_CALL <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> in den <intent-filter> des Empfängers in AndroidManifest.xml aufnehmen.
Um die Telefonnummer des beabsichtigten ausgehenden Anrufs zu erhalten, erhalten wir innerhalb der onReceive(Context, Intent)-Methode die Nummer aus dem Intent als Extra. Um zu verhindern, dass dieser beabsichtigte Aufruf durchgeführt wird, können wir setResultData() aufrufen und ihm ein Null-Argument übergeben. Die resultData wird als die eigentliche anzurufende Nummer verwendet.
1 |
@Override
|
2 |
public void onReceive(final Context context, Intent intent) { |
3 |
// for outgoing call
|
4 |
String outgoingPhoneNo = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER).toString(); |
5 |
// prevent outgoing call
|
6 |
setResultData(null); |
7 |
}
|
In unserem Tutorial hier auf Envato Tuts+ erfahren Sie mehr über Broadcasts und Broadcast-Empfänger:
4. Senden von SMS-Nachrichten
Sie haben nur zwei Möglichkeiten zum Senden von SMS: Verwenden der SMS-Client-Anwendung des Geräts oder Überspringen des Clients, indem Sie die SMS direkt von Ihrer App aus senden. Wir werden uns beide Szenarien ansehen und Sie können entscheiden, welches für Ihren Anwendungsfall besser ist. Beginnen wir mit dem Senden einer SMS mit dem SMS-Client des Geräts.
Einrichten des Layouts
Zuerst müssen wir unser Hauptlayout so ändern, dass es ein EditText-Feld für die Nachricht und eine Schaltfläche Nachricht senden enthält.
1 |
<!--/ ... /-->
|
2 |
<EditText
|
3 |
android:id="@+id/et_message" |
4 |
android:hint="Enter message" |
5 |
android:inputType="textCapSentences|textMultiLine" |
6 |
android:maxLength="2000" |
7 |
android:maxLines="12" |
8 |
android:layout_width="match_parent" |
9 |
android:layout_height="wrap_content"/> |
10 |
|
11 |
<Button
|
12 |
android:id="@+id/btn_send_message" |
13 |
android:layout_gravity="center_horizontal" |
14 |
android:text="Send Messange" |
15 |
android:layout_width="wrap_content" |
16 |
android:layout_height="wrap_content"/> |
17 |
<!--/ ... /-->
|
Ändern Sie die MainActivity
Erstellen Sie in unserer onCreate()-Methode in unserer MainActivity-Klasse eine Absicht mit ACTION_SENDTO als erstem Argument und einem smsto:<phone number>-URI als zweitem Argument. Die Textnachricht ist der Wert des sms_body-Extras:
1 |
// ...
|
2 |
Button sendMessageBtn = (Button) findViewById(R.id.btn_send_message); |
3 |
final EditText messagetEt = (EditText) findViewById(R.id.et_message); |
4 |
sendMessageBtn.setOnClickListener(new View.OnClickListener() { |
5 |
@Override
|
6 |
public void onClick(View view) { |
7 |
String message = messagetEt.getText().toString(); |
8 |
String phoneNo = mPhoneNoEt.getText().toString(); |
9 |
if(!TextUtils.isEmpty(message) && !TextUtils.isEmpty(phoneNo)) { |
10 |
Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + phoneNo)); |
11 |
smsIntent.putExtra("sms_body", message); |
12 |
startActivity(smsIntent); |
13 |
}
|
14 |
}
|
15 |
});
|
16 |
// ...
|
Hier überwacht der SMS-Client den Status der Nachrichtenzustellung.
Führen Sie die App aus
Wenn alle erforderlichen Felder ausgefüllt sind, wird durch Klicken auf die Schaltfläche SMS senden der SMS-Client des Benutzers geöffnet oder dem Benutzer die Möglichkeit geboten, eine App auszuwählen, falls noch keine ausgewählt wurde.



5. Direktes Senden von SMS-Nachrichten
Als Nächstes sehen wir uns an, wie Sie die SMS direkt aus unserer Anwendung senden können, anstatt den SMS-Client des Geräts zu verwenden.
Berechtigung in AndroidManifest.xml hinzufügen
Wie üblich müssen wir die Berechtigung in AndroidManifest.xml registrieren.
1 |
<uses-permission android:name="android.permission.SEND_SMS"/> |
Ändern Sie die MainActivity-Klasse
Als Nächstes müssen wir für Android 6.0 (API-Level 23) und höher während der Laufzeit die SEND_SMS-Berechtigung anfordern.
Um mehr über Android-Laufzeitberechtigungen und deren Änderungen in Version 6.0 zu erfahren, sehen Sie sich unser Tutorial hier auf Envato Tuts+ an:
Um eine SMS zu senden, rufen wir die Standardinstanz von SmsManager ab und rufen dann ihre sendTextMessage()-Methode auf, wobei wir die Telefonnummer als erstes Argument und die Nachricht als zweites Argument übergeben:
1 |
// ...
|
2 |
final int SEND_SMS_PERMISSION_REQUEST_CODE = 111; |
3 |
private Button mSendMessageBtn; |
4 |
|
5 |
@Override
|
6 |
protected void onCreate(Bundle savedInstanceState) { |
7 |
// ...
|
8 |
mSendMessageBtn = (Button) findViewById(R.id.btn_send_message); |
9 |
final EditText messagetEt = (EditText) findViewById(R.id.et_message); |
10 |
|
11 |
mSendMessageBtn.setEnabled(false); |
12 |
if(checkPermission(Manifest.permission.SEND_SMS)) { |
13 |
mSendMessageBtn.setEnabled(true); |
14 |
}else { |
15 |
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.SEND_SMS}, |
16 |
SEND_SMS_PERMISSION_REQUEST_CODE); |
17 |
}
|
18 |
mSendMessageBtn.setOnClickListener(new View.OnClickListener() { |
19 |
@Override
|
20 |
public void onClick(View view) { |
21 |
String message = messagetEt.getText().toString(); |
22 |
String phoneNo = mPhoneNoEt.getText().toString(); |
23 |
if(!TextUtils.isEmpty(message) && !TextUtils.isEmpty(phoneNo)) { |
24 |
|
25 |
if(checkPermission(Manifest.permission.SEND_SMS)) { |
26 |
SmsManager smsManager = SmsManager.getDefault(); |
27 |
smsManager.sendTextMessage(phoneNo, null, message, null, null); |
28 |
}else { |
29 |
Toast.makeText(MainActivity.this, "Permission denied", Toast.LENGTH_SHORT).show(); |
30 |
}
|
31 |
}
|
32 |
}
|
33 |
});
|
34 |
}
|
35 |
|
36 |
private boolean checkPermission(String permission) { |
37 |
int checkPermission = ContextCompat.checkSelfPermission(this, permission); |
38 |
return (checkPermission == PackageManager.PERMISSION_GRANTED); |
39 |
}
|
40 |
|
41 |
@Override
|
42 |
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { |
43 |
switch (requestCode) { |
44 |
case SEND_SMS_PERMISSION_REQUEST_CODE: { |
45 |
if(grantResults.length > 0 && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { |
46 |
mSendMessageBtn.setEnabled(true); |
47 |
}
|
48 |
return; |
49 |
}
|
50 |
}
|
51 |
}
|
52 |
// ...
|
Um den Zustellungsstatus zu überwachen, verfügt die SMSManager-Methode sendTextMessage() über zwei optionale PendingIntent-Parameter: sentIntent und deliveryIntent.
1 |
void sendTextMessage (String destinationAddress, |
2 |
String scAddress, |
3 |
String text, |
4 |
PendingIntent sentIntent, |
5 |
PendingIntent deliveryIntent) |
Wenn Sie sentIntent verwenden möchten, achten Sie bei Erfolg auf den Ergebniscode Activity.RESULT_OK oder einen von RESULT_ERROR_GENERIC_FAILURE, RESULT_ERROR_RADIO_OFF und RESULT_ERROR_NULL_PDU, um einen Fehler anzuzeigen.
6. Empfangen einer SMS-Nachricht
Damit Ihre App beginnen kann, SMS-Nachrichten vom Telefon des Benutzers zu empfangen, ist es am besten, einen Broadcast-Empfänger zu registrieren, damit er benachrichtigt werden kann, wenn eine neue SMS eingeht, auch wenn Ihre App nicht im Vordergrund ausgeführt wird.
Berechtigung hinzufügen
Fügen Sie die Berechtigung RECEIVE_SMS zu AndroidManifest.xml hinzu:
1 |
<uses-permission android:name="android.permission.RECEIVE_SMS"/> |
Als nächstes müssen wir überprüfen, ob die App zur Laufzeit berechtigt ist, SMS-Nachrichten zu empfangen. Überprüfen Sie daher in der MainActivity-Klasse die RECEIVE_SMS-Berechtigung. Wenn es nicht gefunden wird, fordern Sie es an.
1 |
// ...
|
2 |
@Override
|
3 |
protected void onCreate(Bundle savedInstanceState) { |
4 |
// ...
|
5 |
if(!checkPermission(Manifest.permission.RECEIVE_SMS)) { |
6 |
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_SMS}, 222); |
7 |
}
|
8 |
}
|
9 |
// ...
|
Erstellen Sie einen Broadcast-Empfänger
Wir rufen jedes Objekt der SmsMessage-Klasse ab, indem wir die Methode createFromPdu(byte[] pdu) verwenden und ihm eine PDU (Protokolldateneinheit) übergeben. Wir fügen es dann zu unserem Nachrichten-Array hinzu.
Um API 23 und höher zu unterstützen, sollten Sie das Format String extra angeben (entweder "3gpp" für GSM/UMTS/LTE-Nachrichten im 3GPP-Format oder "3gpp2" für CDMA/LTE-Nachrichten im 3GPP2-Format).
1 |
import android.content.BroadcastReceiver; |
2 |
import android.content.Context; |
3 |
import android.content.Intent; |
4 |
import android.os.Build; |
5 |
import android.os.Bundle; |
6 |
import android.telephony.SmsMessage; |
7 |
import android.widget.Toast; |
8 |
|
9 |
public class SMSReceiver extends BroadcastReceiver { |
10 |
|
11 |
@Override
|
12 |
public void onReceive(Context context, Intent intent) { |
13 |
Bundle bundle = intent.getExtras(); |
14 |
if(bundle != null) { |
15 |
Object[] pdus = (Object[]) bundle.get("pdus"); |
16 |
String format = bundle.getString("format"); |
17 |
|
18 |
final SmsMessage[] messages = new SmsMessage[pdus.length]; |
19 |
for(int i = 0; i < pdus.length; i++) { |
20 |
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
21 |
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i], format); |
22 |
}else { |
23 |
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); |
24 |
}
|
25 |
String senderPhoneNo = messages[i].getDisplayOriginatingAddress(); |
26 |
Toast.makeText(context, "Message " + messages[0].getMessageBody() + ", from " + senderPhoneNo, Toast.LENGTH_SHORT).show(); |
27 |
}
|
28 |
}
|
29 |
}
|
30 |
}
|
Führen Sie nun die App aus, schließen Sie sie und senden Sie Ihrem emulierten Telefon eine SMS.
Abschluss
In diesem Tutorial haben Sie Folgendes gelernt:
- einen Anruf über Ihre App tätigen
- Überwachung von Telefonanrufereignissen
- Senden von SMS-Nachrichten entweder über die Geräte-Messaging-App oder direkt über Ihre eigene App
- Empfangen von SMS-Nachrichten im Hintergrund
Es gibt noch viel mehr, was Sie mit Telefonanrufen und SMS-Nachrichten in Android tun können. Besuchen Sie die Android-Telefonie-API und die SMSManager-API-Dokumentation, um mehr zu erfahren.
Sehen Sie sich in der Zwischenzeit einige unserer anderen Beiträge zur Android-Entwicklung an!















