use ringtone instead of mediaplayer to play ringtone

This commit is contained in:
Juha Heinanen
2018-07-09 16:29:02 +03:00
parent 378214cbb0
commit 1c9dcb2fda
2 changed files with 27 additions and 11 deletions

View File

@ -1,6 +1,5 @@
package com.tutpro.baresip
import android.app.Notification
import android.app.Notification.VISIBILITY_PUBLIC
import android.app.NotificationManager
import android.app.PendingIntent
@ -9,7 +8,6 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.media.MediaPlayer
import android.net.NetworkInfo
import android.net.wifi.WifiManager
import android.os.IBinder
@ -23,7 +21,6 @@ import java.io.File
import java.io.FileInputStream
import java.io.ObjectInputStream
import android.support.v4.content.LocalBroadcastManager
import android.media.RingtoneManager
class BaresipService: Service() {
@ -37,7 +34,6 @@ class BaresipService: Service() {
internal lateinit var nr: BroadcastReceiver
internal lateinit var wl: PowerManager.WakeLock
internal lateinit var fl: WifiManager.WifiLock
internal lateinit var mp: MediaPlayer
override fun onCreate() {
@ -71,11 +67,6 @@ class BaresipService: Service() {
}
}
val uri = RingtoneManager
.getActualDefaultRingtoneUri(applicationContext, RingtoneManager.TYPE_RINGTONE)
mp = MediaPlayer.create(getApplicationContext(), uri)
mp.isLooping = true
super.onCreate()
}
@ -253,7 +244,6 @@ class BaresipService: Service() {
snb.setContent(view)
nm.notify(STATUS_NOTIFICATION_ID, snb.build())
}
mp.start()
/* if (!Utils.isVisible()) {
nm.cancel(STATUS_NOTIFICATION_ID)
val cnb = NotificationCompat.Builder(this)
@ -295,7 +285,6 @@ class BaresipService: Service() {
snb.setContent(view)
snb.setVibrate(null)
nm.notify(STATUS_NOTIFICATION_ID, snb.build())
mp.stop()
}
}
}

View File

@ -17,6 +17,8 @@ import android.content.IntentFilter
import android.content.pm.PackageManager
import android.graphics.Color
import android.media.AudioManager
import android.media.Ringtone
import android.media.RingtoneManager
import android.support.v4.content.LocalBroadcastManager
import android.support.v7.view.menu.ActionMenuItemView
import android.view.inputmethod.InputMethodManager
@ -26,6 +28,7 @@ import android.widget.RelativeLayout.LayoutParams
import android.widget.RelativeLayout
import android.widget.*
import android.view.*
import java.util.*
class MainActivity : AppCompatActivity() {
@ -41,6 +44,8 @@ class MainActivity : AppCompatActivity() {
internal lateinit var uaAdapter: UaSpinnerAdapter
internal lateinit var aorSpinner: Spinner
internal lateinit var am: AudioManager
internal lateinit var rt: Ringtone
internal var rtTimer: Timer? = null
internal lateinit var imm: InputMethodManager
internal lateinit var nm: NotificationManager
internal lateinit var serviceEventReceiver: BroadcastReceiver
@ -69,6 +74,9 @@ class MainActivity : AppCompatActivity() {
dtmf = findViewById(R.id.dtmf) as EditText
am = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val rtUri = RingtoneManager.getActualDefaultRingtoneUri(applicationContext,
RingtoneManager.TYPE_RINGTONE)
rt = RingtoneManager.getRingtone(applicationContext, rtUri)
imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
nm = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
@ -325,6 +333,15 @@ class MainActivity : AppCompatActivity() {
else
addCallViews(ua, new_call, Call.uaCalls(calls, ua, "in").size * 10)
am.mode = AudioManager.MODE_RINGTONE
rt.play()
rtTimer = Timer()
rtTimer!!.scheduleAtFixedRate(object : TimerTask() {
override fun run() {
if (!rt.isPlaying()) {
rt.play()
}
}
}, 1000 * 1, 1000 * 1)
if (Utils.isVisible()) {
Log.d("Baresip", "Baresip is visible")
val i = Intent(applicationContext, MainActivity::class.java)
@ -385,6 +402,11 @@ class MainActivity : AppCompatActivity() {
history.add(History(aor, call.peerURI, "in", true))
call.hasHistory = true
}
if (rtTimer != null) {
rtTimer!!.cancel()
rtTimer = null
if (rt.isPlaying) rt.stop()
}
am.mode = AudioManager.MODE_IN_COMMUNICATION
am.isSpeakerphoneOn = false
// am.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
@ -509,6 +531,11 @@ class MainActivity : AppCompatActivity() {
History.aorRemoveHistory(history, aor)
history.add(History(aor, call.peerURI, "in", false))
}
if (rtTimer != null) {
rtTimer!!.cancel()
rtTimer = null
if (rt.isPlaying) rt.stop()
}
} else {
Log.d("Baresip", "Removing outgoing call $uap/$callp/" +
call.peerURI)