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); } } }