package lilin.com.service;
|
|
import android.app.Notification;
|
import android.app.NotificationChannel;
|
import android.app.NotificationManager;
|
import android.app.PendingIntent;
|
import android.app.Service;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.graphics.Color;
|
import android.media.MediaPlayer;
|
import android.os.IBinder;
|
import android.util.Log;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.Timer;
|
import java.util.TimerTask;
|
|
import lilin.com.LinphoneMiniUtils;
|
import lilin.com.MainActivity;
|
import lilin.com.MyCApi;
|
import lilin.com.R;
|
import lilin.com.view.FFWlGLSurfaceView;
|
|
public class BareSipService extends Service {
|
public BareSipService() {
|
}
|
Notification notification;
|
private MediaPlayer mBgmMediaPlayer;
|
private Context mContext;
|
private Timer mTimer;
|
|
private MyCApi myCApi=null;
|
private static BareSipService mInstance;
|
|
public static BareSipService getInstance() {
|
return mInstance;
|
}
|
@Override
|
public void onCreate() {
|
|
myCApi= new MyCApi();
|
|
myCApi.setiJniListener(new MyCApi.IJniListener() {
|
|
@Override
|
public void bareVstart() {
|
Intent intent1 = new Intent(MainActivity.RECEIVE_MAIN_ACTIVITY);
|
intent1.putExtra("action", "vstart");
|
sendBroadcast( intent1);
|
}
|
|
@Override
|
public void bareVstop() {
|
Intent intent1 = new Intent(MainActivity.RECEIVE_MAIN_ACTIVITY);
|
intent1.putExtra("action", "vstop");
|
sendBroadcast( intent1);
|
}
|
|
@Override
|
public void bareCodec(String code) {
|
Intent intent1 = new Intent(MainActivity.RECEIVE_MAIN_ACTIVITY);
|
intent1.putExtra("action", "codec");
|
intent1.putExtra("data",code);
|
sendBroadcast( intent1);
|
}
|
|
@Override
|
public void bareState(String state) {
|
Intent intent1 = new Intent(MainActivity.RECEIVE_MAIN_ACTIVITY);
|
intent1.putExtra("action", "callstate");
|
intent1.putExtra("data",state);
|
if(state.equalsIgnoreCase("REGISTER_OK")){
|
Intent intent2 = new Intent(MainActivity.RECEIVE_MAIN_ACTIVITY);
|
intent2.putExtra("action", "reg_state");intent2.putExtra("data",1 );
|
sendBroadcast( intent2);
|
}else if(state.equalsIgnoreCase("REGISTER_FAIL")){
|
Intent intent2 = new Intent(MainActivity.RECEIVE_MAIN_ACTIVITY);
|
intent2.putExtra("action", "reg_state");intent2.putExtra("data",0 );
|
sendBroadcast( intent2);
|
}
|
sendBroadcast( intent1);
|
}
|
|
|
});
|
mInstance = this;
|
mContext=this;
|
Intent notificationIntent = new Intent(this, MainActivity.class);
|
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
|
|
String CHANNEL_ONE_ID = getPackageName();
|
String CHANNEL_ONE_NAME = "Channel One";
|
NotificationChannel notificationChannel = null;
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
notificationChannel = new NotificationChannel(CHANNEL_ONE_ID, CHANNEL_ONE_NAME, NotificationManager.IMPORTANCE_HIGH);
|
notificationChannel.enableLights(true);
|
notificationChannel.setLightColor(Color.RED);
|
notificationChannel.setShowBadge(true);
|
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
|
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
manager.createNotificationChannel(notificationChannel);
|
|
notification = new Notification.Builder(mContext, CHANNEL_ONE_ID)
|
.setSmallIcon(R.drawable.ic_launcher_background)
|
.setWhen(System.currentTimeMillis())
|
.setTicker("Linphone")
|
.setContentTitle("sip在线")
|
.setContentText("呵呵")
|
.setOngoing(true)
|
.setPriority(Notification.PRIORITY_MAX)
|
.setContentIntent(pendingIntent)
|
.setAutoCancel(false)
|
.build();
|
} else {
|
notification = new Notification.Builder(mContext)
|
.setSmallIcon(R.drawable.ic_launcher_background)
|
.setWhen(System.currentTimeMillis())
|
.setTicker("Linphone")
|
.setContentTitle("sip在线")
|
.setContentText("呵呵")
|
.setOngoing(true)
|
.setPriority(Notification.PRIORITY_MAX)
|
.setContentIntent(pendingIntent)
|
.setAutoCancel(false)
|
.build();
|
}
|
/*使用startForeground,如果id为0,那么notification将不会显示*/
|
startForeground(100, notification);
|
|
//3.最关键的神来之笔,也是最投机的动作,没办法要骗过CPU
|
// 这就是播放音乐类APP不被杀的做法,自己找个无声MP3放进来循环播放
|
if (mBgmMediaPlayer == null) {
|
mBgmMediaPlayer = MediaPlayer.create(this, R.raw.bg);
|
mBgmMediaPlayer.setLooping(true);
|
mBgmMediaPlayer.start();
|
mBgmMediaPlayer.setVolume(0.1f,0.1f );
|
}
|
|
|
String path = getApplicationContext().getFilesDir().getAbsolutePath() ;
|
try {
|
// LinphoneMiniUtils.copyFromPackage(this, R.raw.accounts, new File(path + "/accounts").getName());
|
LinphoneMiniUtils.copyIfNotExist(this, R.raw.accounts, path + "/accounts");
|
LinphoneMiniUtils.copyFromPackage(this, R.raw.config, new File(path + "/config").getName());
|
LinphoneMiniUtils.copyIfNotExist(this, R.raw.ring, path + "/ring.wav");
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
new Thread(new Runnable() {
|
public void run() {
|
myCApi.bareStart();
|
Log.e("提示","end thread");
|
}
|
}).start();
|
|
|
TimerTask lTask = new TimerTask() {
|
@Override
|
public void run() {
|
Log.e("心跳提示", ">>"+myCApi.bareIsReg());
|
}
|
};
|
mTimer = new Timer("baresip jiance");
|
mTimer.schedule(lTask, 0, 60000);
|
|
super.onCreate();
|
}
|
|
@Override
|
public IBinder onBind(Intent intent) {
|
|
return null;
|
}
|
@Override
|
public void onDestroy() {
|
|
mTimer.cancel();
|
stopForeground(true);
|
stopSelf();
|
|
mBgmMediaPlayer.release();
|
//
|
myCApi.bareStop();
|
|
super.onDestroy();
|
}
|
public void barejie(){
|
if(myCApi!=null){
|
myCApi.barejie();
|
}
|
}
|
public void barereg(String sipaddress){
|
if(myCApi!=null){Log.e("tishi ",sipaddress);
|
myCApi.barereg(sipaddress);
|
}
|
}
|
public void baregua(){
|
if(myCApi!=null){
|
myCApi.baregua();
|
}
|
}
|
public void barecall(String num){
|
if(myCApi!=null){
|
myCApi.barecall(num);
|
}
|
}
|
public void barecallv(String num){
|
if(myCApi!=null){
|
myCApi.barecallv(num);
|
}
|
}
|
|
public void setDisplay(FFWlGLSurfaceView wlGLSurfaceView){
|
if(myCApi!=null){
|
myCApi.setWlGLSurfaceView(wlGLSurfaceView );
|
}
|
|
}
|
public void bareSendv(byte[] data,int w,int h){
|
if(myCApi!=null){
|
myCApi.javaBareSendv(data, w, h);
|
}
|
}
|
}
|