gunakan PhoneStateListener untuk melihat kapan panggilan berakhir. Anda kemungkinan besar perlu memicu tindakan pendengar untuk menunggu panggilan dimulai (tunggu sampai diubah dari PHONE_STATE_OFFHOOK ke PHONE_STATE_IDLE lagi) dan kemudian menulis beberapa kode untuk mengembalikan aplikasi Anda pada status IDLE.
Anda mungkin perlu menjalankan pendengar dalam layanan untuk memastikannya tetap hidup dan aplikasi Anda dimulai kembali. beberapa kode contoh:
EndCallListener callListener = new EndCallListener();
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
Definisi pendengar:
private class EndCallListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if(TelephonyManager.CALL_STATE_RINGING == state) {
Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
}
if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
//wait for phone to go offhook (probably set a boolean flag) so you know your app initiated the call.
Log.i(LOG_TAG, "OFFHOOK");
}
if(TelephonyManager.CALL_STATE_IDLE == state) {
//when this state occurs, and your flag is set, restart your app
Log.i(LOG_TAG, "IDLE");
}
}
}
Di Manifest.xml
file Anda tambahkan izin berikut:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Ini tentang pertanyaan yang diajukan oleh Pemula.
Masalah dengan kode Anda adalah Anda tidak memberikan nomor dengan benar.
Kode tersebut harus:
Jangan lupa untuk menambahkan izin dalam file manifes.
atau
untuk nomor darurat jika
DIAL
digunakan.sumber
Kami memiliki masalah yang sama dan berhasil menyelesaikannya dengan menggunakan a
PhoneStateListener
untuk mengidentifikasi kapan panggilan berakhir, tetapi selain itu kami harus kefinish()
aktivitas asli sebelum memulai lagi denganstartActivity
, jika tidak, log panggilan akan berada di depannya.sumber
Saya menemukan EndCallListener contoh paling fungsional, untuk mendapatkan perilaku yang dijelaskan (selesai (), panggilan, restart) saya menambahkan beberapa SharedPreferences sehingga Listener memiliki referensi untuk mengelola perilaku ini.
OnClick, inisialisasi, dan EndCallListener saya hanya merespons panggilan dari aplikasi. Panggilan lain diabaikan.
tambahkan ini ke strings.xml
dan sesuatu seperti ini dalam Manifes Anda jika Anda perlu kembali ke tampilan dan nuansa sebelum panggilan
dan letakkan ini di 'myActivity' Anda
gunakan ini untuk menginisialisasi perilaku untuk onClick Anda di myActivity misalnya setelah onCreate ()
Anda harus menemukan bahwa mengklik daftar nomor telepon Anda menyelesaikan aktivitas Anda, membuat panggilan ke nomor tersebut dan kembali ke aktivitas Anda ketika panggilan berakhir.
Melakukan panggilan dari luar aplikasi Anda saat itu masih ada tidak akan memulai kembali aktivitas Anda (kecuali jika itu sama dengan nomor BParty terakhir yang dipanggil).
:)
sumber
Anda dapat menggunakan startActivityForResult ()
sumber
Ini solusi dari sudut pandang saya:
Tentu saja dalam definisi Activity (class) Anda harus mengimplementasikan View.OnClickListener.
sumber
Ini adalah contoh saya, pertama pengguna dapat menulis nomor yang dia ingin panggil dan kemudian menekan tombol panggil dan diarahkan ke telepon. Setelah pembatalan panggilan, pengguna akan dikirim kembali ke aplikasi. Untuk itu, tombol ini perlu memiliki metode onClick ('makePhoneCall' dalam contoh ini) di xml. Anda juga perlu mendaftarkan izin dalam manifes.
Nyata
Aktivitas
XML
sumber
sumber
Jika Anda akan menggunakan pendengar, Anda juga perlu menambahkan izin ini ke manifes.
sumber
Di dalam PhoneStateListener setelah melihat panggilan selesai digunakan dengan lebih baik:
Di mana CallDispatcherActivity adalah aktivitas di mana pengguna telah meluncurkan panggilan (ke operator layanan taksi, dalam kasus saya). Ini hanya menghilangkan aplikasi telepon Android dari atas, pengguna kembali bukan kode jelek yang saya lihat di sini.
sumber
((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE);
Intent intentRestart = new Intent(ControlPanel.this, ControlPanel.class);
. Saya harus menunjukkan bahwa PhoneStateListener juga dalam ControlPanel. Yaitu, Tujuan saya adalah mengembalikan UI ke keadaan sebelum memulai panggilan telepon. Ada saran?Untuk kembali ke Anda
Activity
, Anda perlu mendengarkanTelephonyStates
. Pada itulistener
Anda dapat mengirimIntent
untuk membuka kembaliActivity
setelah ponsel dalam keadaan diam.Setidaknya begitulah cara saya akan melakukannya.
sumber
sumber
Coba gunakan:
di akhir kegiatan. Ini akan mengarahkan Anda ke aktivitas Anda sebelumnya.
sumber
Saat
PhoneStateListener
digunakan, seseorang perlu memastikan bahwaPHONE_STATE_IDLE
aPHONE_STATE_OFFHOOK
digunakan untuk memicu tindakan yang harus dilakukan setelah panggilan. Jika pemicu terjadi saat melihatPHONE_STATE_IDLE
, Anda akan berakhir melakukannya sebelum panggilan. Karena Anda akan melihat statusnya berubahPHONE_STATE_IDLE -> PHONE_STATE_OFFHOOK -> PHONE_STATE_IDLE.
sumber
((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(new PhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE)
akan terus mendengarkan keadaan telepon dan aktif sampai secara eksplisit dihentikan dengan((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE)
// di setonclicklistener masukkan kode ini:
// berikan izin untuk panggilan dalam manifes:
sumber
@ Dmitri Novikov,
FLAG_ACTIVITY_CLEAR_TOP
menghapus semua instance aktif di atas yang baru. Jadi, ini bisa mengakhiri instance lama sebelum menyelesaikan proses.sumber
Tambahkan ini adalah xml Anda:
android:autoLink="phone"
sumber
Langkah:
1) Tambahkan izin yang diperlukan dalam
Manifest.xml
file.2) Buat pendengar untuk perubahan status ponsel.
3) Inisialisasi pendengar di blog Anda
OnCreate
tetapi jika Anda ingin melanjutkan aplikasi status terakhir Anda atau membawanya kembali dari tumpukan belakang , lalu ganti
FLAG_ACTIVITY_CLEAR_TOP
denganFLAG_ACTIVITY_SINGLE_TOP
Referensi Jawaban ini
sumber
untuk referensi lebih lanjut klik di sini http://androiddhina.blogspot.in/2015/10/how-to-make-phone-call-from-android.html
sumber
Saat memulai panggilan Anda, itu terlihat baik-baik saja.
Ada perbedaan antara Android 11+ dan ke bawah dalam membawa aplikasi Anda ke depan.
Android 10 atau kurang, Anda harus memulai niat baru, Android 11+ cukup Anda gunakan
BringTaskToFront
Dalam IDLE status panggilan:
Saya mengatur
MyActivity.MyActivityTaskId
ketika melakukan panggilan pada aktivitas saya seperti itu, ini tidak berfungsi, atur variabel ini pada halaman aktivitas induk dari halaman yang Anda ingin kembali.MyActivityTaskId
adalah variabel statis di kelas aktivitas sayaSaya harap ini akan berhasil untuk Anda. Saya menggunakan kode di atas sedikit berbeda, saya membuka aplikasi saya segera setelah panggilan dijawab agar pengguna dapat melihat rincian penelepon.
Saya telah mengatur beberapa hal dalam
AndroidManifest.xml
:dan izin:
Silakan ajukan pertanyaan jika atau ketika Anda buntu.
sumber