Add NetworkMonitor
[rtmpclient.git] / app / src / main / java / ai / suanzi / rtmpclient / MainActivity.java
index 4886501..320e2bb 100644 (file)
@@ -47,6 +47,7 @@ import android.content.ComponentName;
 
 import ai.suanzi.rtmpclient.MyService.LocalBinder;
 import android.os.IBinder;
+import android.net.ConnectivityManager;
 
 //"rtmp://gpussh.suanzi.ai:1935/myapp/suanzi_ac83f34ead90_cameraid";
 
@@ -75,6 +76,7 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal
     private String mMacAddr = "";
     //private CameraView mCameraView;
     private String mRtmpUrl;
+    private NetworkMonitor networkMonitor;
 
     boolean mBounded;
     MyService mServer;
@@ -110,8 +112,6 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal
         mSufaceView = findViewById(R.id.surfaceView);
         mHolder = mSufaceView.getHolder();
         mHolder.addCallback(this);
-
-
         //intent.setPackage(this.getPackageName());   // init service
         //intent.setAction("ai.suanzi.rtmpclient.service");
     }
@@ -136,10 +136,24 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal
             if(mServer.setRtmpUrl(UserInfo.getConfig().toUrl())){
                 mServer.startPreview(mHolder);
             }
-
         }
     };
 
+    private void doBindService(){
+        if(!mBounded) {
+            gLogger.debug("doBindService");
+            bindService(mIntent, mConnection, BIND_AUTO_CREATE);
+        }
+    }
+
+    private void doUnbindService() {
+        if(mBounded){
+            gLogger.debug("doUnbindService");
+            unbindService(mConnection);
+            mBounded = false;
+        }
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -150,8 +164,12 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal
 
         //startService(intent);
         mIntent = new Intent(this, MyService.class);
-        bindService(mIntent, mConnection, BIND_AUTO_CREATE);
-
+        if(NetworkMonitor.isNetworkAvailable(this)){
+            gLogger.error("Current network is available");
+            doBindService();
+        } else {
+            gLogger.error("Current network is NOT available");
+        }
 
         mBtnStart.setText("start");
         mBtnStart.setOnClickListener(new View.OnClickListener(){
@@ -159,10 +177,39 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal
             public void onClick(View view){
                 gLogger.error("----------> onClick");
                 saveConfig();
-                unbindService(mConnection);
-                bindService(mIntent, mConnection, BIND_AUTO_CREATE);
+                doUnbindService();
+
             }
         });
+
+        if ( networkMonitor == null) {
+            networkMonitor = new NetworkMonitor(new NetworkMonitor.NetworkListener() {
+                @Override
+                public void onWifiConnected() {
+                    gLogger.error("onWifiConnected");
+                    doBindService();
+                }
+
+                @Override
+                public void onWifiDisconnected() {
+                    gLogger.error("onWifiDisconnected");
+                    doUnbindService();
+                }
+
+                @Override
+                public void onWifiEnabled() {
+                    gLogger.error("onWifiEnabled");
+                }
+
+                @Override
+                public void onWifiDisabled() {
+                    gLogger.error("onWifiDisabled");
+                }
+            });
+        }
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+        registerReceiver(networkMonitor, filter);
     }
 
     @Override
@@ -192,6 +239,7 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal
     @Override
     protected void onDestroy(){
         super.onDestroy();
+        unregisterReceiver(networkMonitor);
         gLogger.debug("onDestroy --------->");
     }
 
@@ -201,9 +249,6 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal
         gLogger.debug("onRestart ---------->");
     }
 
-
-
-
     // SurfaceHolder.Callback implementation
     @Override
     public void surfaceCreated(final SurfaceHolder holder){
@@ -323,55 +368,4 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal
         i.addCategory(Intent.CATEGORY_HOME);
         this.startActivity(i);
     }
-
-//
-//    // class StreamTask AsyncTask
-//    private class StreamTask extends AsyncTask<Void, Void, Void>{
-//        private byte[] data;
-//
-//        StreamTask(byte[] data){
-//            this.data = data;
-//        }
-//
-//        @Override
-//        protected Void doInBackground(Void... params) {
-//
-//            if (this.data != null){
-//                Log.e(TAG, "fps: " + mCamera.getParameters().getPreviewFrameRate());
-//                ffmpeg.process(this.data);
-//            }
-//            return null;
-//        }
-//    }
-
-            /*if (null != mStreamTask){
-            switch (mStreamTask.getStatus()){
-                case RUNNING:
-                    Log.e(TAG, "onPreviewFrame Running");
-                    return;
-                case PENDING:
-                    Log.e(TAG,"OnPreviewFrame Pending");
-                    mStreamTask.cancel(false);
-                    break;
-            }
-        }
-        mStreamTask = new StreamTask(data);
-        mStreamTask.execute((Void)null);
-*/
-
-//        ong endTime = System.currentTimeMillis();
-//        mExecutor.execute(new Runnable() {
-//            @Override
-//            public void run() {
-//                //long encodeTime = System.currentTimeMillis();
-//                ffmpeg.process(data);
-    //Log.e(TAG, "编码第:" + (encodeCount++) + "帧,耗时:" + (System.currentTimeMillis() - encodeTime));
-//            }
-//        });
-    //Log.e(TAG, "采集第:" + (++count) + "帧,距上一帧间隔时间:"
-//                + (endTime - previewTime) + "  " + Thread.currentThread().getName());
-//        previewTime = endTime;*/
-
-
-
 }