X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fai%2Fsuanzi%2Frtmpclient%2FMainActivity.java;h=c257b9f97ffcb66b334e0efa1b98d0d954e1975a;hb=a2555d7a8d228c91da9f8014ca4a09dbd0d050ae;hp=bf53ce4d272ad52b479d60b3863b104de2d8a20a;hpb=d0d496554f96cebf84db3e9b3cf507577272ef8c;p=rtmpclient.git diff --git a/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java b/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java index bf53ce4..c257b9f 100644 --- a/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java +++ b/app/src/main/java/ai/suanzi/rtmpclient/MainActivity.java @@ -1,13 +1,19 @@ package ai.suanzi.rtmpclient; import android.content.IntentFilter; +import android.hardware.Camera; +import android.net.Uri; import android.support.design.widget.TextInputEditText; +import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.util.DisplayMetrics; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.Button; import android.widget.Toast; import android.content.Context; @@ -25,21 +31,20 @@ import android.content.ComponentName; import ai.suanzi.rtmpclient.MyService.LocalBinder; import android.os.IBinder; import android.net.ConnectivityManager; +import android.view.ViewGroup; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.client.methods.CloseableHttpResponse; -//"rtmp://gpussh.suanzi.ai:1935/myapp/suanzi_ac83f34ead90"; +//import org.apache.http.client.methods; +import android.view.MotionEvent; +import android.graphics.Color; +import android.os.Build; +import android.content.pm.ActivityInfo; -public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, MyService.MyServiceEventListener{ +public class MainActivity extends AppCompatActivity implements MyService.MyServiceEventListener, CameraView.Callback { - private static final String TAG = "MainActivity"; private Logger gLogger; - - private SurfaceHolder mHolder; - private SurfaceView mSufaceView; - private Button mBtnStart; - private TextInputEditText mTextServer; - private TextInputEditText mTextUser; - private TextInputEditText mTextCamera; - private String mMacAddr = ""; private NetworkMonitor networkMonitor; private UsbMonitor mUsbMonitor; private ServiceHealthMonitor mServiceHealthMonitor; @@ -48,37 +53,11 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal boolean mBounded = false; MyService mServer; Intent mIntent; + private boolean isFullScreen = false; - private void configLog(){ - try { - final LogConfigurator logConfigurator = new LogConfigurator(); - String fname = getExternalFilesDir(null) + File.separator + "log.txt"; - logConfigurator.setFileName(fname); - Log.e(TAG, "Log file is located at: " + fname); - logConfigurator.setRootLevel(Level.DEBUG); - logConfigurator.setLevel("org.apache", Level.ERROR); - logConfigurator.setMaxFileSize(1024 * 1024 * 10); - logConfigurator.configure(); - gLogger = Logger.getLogger(getClass()); - } catch (Exception e){ - e.printStackTrace(); - } - } + private CameraView mCameraView; private void init(){ - configLog(); - gLogger.debug("#######################################"); - // set config file - UserInfo.setConfigPath(getExternalFilesDir(null) + File.separator + "config"); - - this.mMacAddr = getMacAddr(); - mBtnStart = findViewById(R.id.button); - mTextServer = findViewById(R.id.textServer); - mTextUser = findViewById(R.id.textUser); - mTextCamera = findViewById(R.id.textCamera); - mSufaceView = findViewById(R.id.surfaceView); - mHolder = mSufaceView.getHolder(); - mHolder.addCallback(this); mIntent = new Intent(this, MyService.class); mUsbMonitor = new UsbMonitor(new UsbMonitor.UsbListener() { @@ -134,10 +113,9 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal gLogger.error("onNotHealthy, in " + INTERVAL + " seconds, the publishing may stopped or have error "); doUnbindService(); doBindService(); - //restartApplication(); } }); - mServiceHealthMonitor.setInterval(INTERVAL); // 5 minutes + mServiceHealthMonitor.setInterval(INTERVAL); } @@ -158,11 +136,13 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal LocalBinder mLocalBinder = (LocalBinder)service; mServer = mLocalBinder.getServiceInstance(); mServer.setServiceEventListener(MainActivity.this); - if(mServer.setRtmpUrl(UserInfo.getConfig().toUrl(mMacAddr))){ - mServer.startPreview(mHolder); + if(mServer.setRtmpUrl(UserInfo.toUrl())){ + mServer.startPreview(mCameraView.getHolder()); + Camera.Size cs = mServer.getBestPictureSize(); + mCameraView.setLayout(cs.width, cs.height); + } else { + gLogger.error("onServiceConnected - setRtmpUrl failed"); } - - } }; @@ -183,48 +163,83 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal } } + private void initCameraView (){ +// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); +// requestWindowFeature(Window.FEATURE_NO_TITLE); +// getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); +// ///setContentView(R.layout.activity_main); +// //getWindow().setNavigationBarColor(Color.TRANSPARENT); +// +// View decorView = getWindow().getDecorView(); +// int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION +// | View.SYSTEM_UI_FLAG_FULLSCREEN; +// decorView.setSystemUiVisibility(uiOptions); +// +// +// ActionBar actionBar = getSupportActionBar(); +// try { +// actionBar.hide(); +// }catch (NullPointerException e){ +// gLogger.error("initCameraView - " + e.getMessage()); +// e.printStackTrace(); +// } + + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏 + + + DisplayMetrics outMetrics = new DisplayMetrics(); + this.getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + + CameraView.SCREEN_WIDTH = outMetrics.widthPixels; + CameraView.SCREEN_HEIGHT = outMetrics.heightPixels; + gLogger.debug("Screen size is w: " + CameraView.SCREEN_WIDTH + ", h: " + CameraView.SCREEN_HEIGHT); + + + + mCameraView = new CameraView(getApplicationContext(), this); + setContentView(R.layout.activity_main); + + ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(640, 480); + addContentView(mCameraView, lp); + //setContentView(mCameraView); + } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - + LogUtil.config(this); + gLogger = Logger.getLogger(getClass()); + gLogger.error("onCreate ---------> "); + UserInfo.readConfig(getExternalFilesDir(null) + File.separator + "config", getMacAddr()); + initCameraView(); init(); - loadConfig(); - if(NetworkMonitor.isNetworkAvailable(this) && mUsbMonitor.hasUsbCamera()){ + if(canStartService()){ gLogger.error("Current network is available"); doBindService(); } else { gLogger.error("Current network NOT available or no USB Camera connected"); } - mBtnStart.setText("start"); - mBtnStart.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View view){ - gLogger.error("----------> onClick"); - saveConfig(); - doUnbindService(); - doBindService(); - } - }); - if(!mServiceHealthMonitor.isAlive()) { gLogger.debug("mServiceHealthMonitor start, interval " + INTERVAL); mServiceHealthMonitor.start(); } + ////////// LogUtil.sendLogs(); /// Log test + //LogUtil.sendLogs(); + // test + //new CheckVersionInfoTask(MainActivity.this).execute(); } @Override protected void onPause(){ super.onPause(); - gLogger.error("OnPause --------->"); + gLogger.debug("OnPause --------->"); } @Override protected void onResume() { super.onResume(); - gLogger.error("OnResume ---------> "); + gLogger.debug("OnResume ---------> "); } @Override @@ -256,60 +271,41 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal @Override public void onBackPressed() { - gLogger.error("onBackPressed --------->"); + gLogger.debug("onBackPressed --------->"); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } - // SurfaceHolder.Callback implementation - @Override - public void surfaceCreated(final SurfaceHolder holder){ - gLogger.error("SurfacedCreated"); - } - @Override - public void surfaceChanged(SurfaceHolder holder, int format, int widht, int height){ - gLogger.error("surfaceChanged"); - mHolder = holder; - if (mServer != null) { - mServer.startPreview(holder); + public boolean onTouchEvent(MotionEvent event) { + if(event.getAction() == MotionEvent.ACTION_UP) { + toggleFullScreen(); } + return super.onTouchEvent(event); } @Override - public void surfaceDestroyed(SurfaceHolder holder){ gLogger.debug("surfaceDestroyed"); + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus && Build.VERSION.SDK_INT >= 19) { + toggleFullScreen(); + } } private String getMacAddr() { WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo info = manager.getConnectionInfo(); + gLogger.debug("Mac Address is " + info.getMacAddress()); return info.getMacAddress().replace(":", ""); //02:00:00:00:00:00 - 020000000000 } - private void loadConfig() { - UserInfo info = UserInfo.getConfig(); - gLogger.error("server is:" + info.server); - mTextServer.setText(info.server.equals("") ? "rtmp://gpussh.suanzi.ai:1935/myapp" : info.server); - mTextUser.setText(info.user); - mTextCamera.setText(info.cameraId); - //mMacAddr = info.macAddr.equals("") ? this.mMacAddr : info.macAddr; - gLogger.error("loadConfig - url is :" + info.toUrl(mMacAddr)); - } + private boolean canStartService(){ - private void saveConfig() { - UserInfo info = UserInfo.getConfig(); - info.update(mTextServer.getText().toString(), mTextUser.getText().toString(), mMacAddr, mTextCamera.getText().toString()); - if(info.saveConfig()) { - Toast.makeText(getApplicationContext(), "Config saved", Toast.LENGTH_LONG).show(); - } else { - Toast.makeText(getApplicationContext(), "Error: config saved", Toast.LENGTH_LONG).show(); + if(System.getProperty("os.arch").equals("i686")){ + return true; } - gLogger.error("saveConfig - url: " + info.toUrl(mMacAddr)); - } - - private boolean canStartService(){ return mUsbMonitor.hasUsbCamera() && NetworkMonitor.isNetworkAvailable(this); } @@ -317,9 +313,9 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal @Override public void onCameraError(String msg){ gLogger.error("onCameraEvent " + msg); - if(mUsbMonitor.hasUsbCamera()){ + //if(mUsbMonitor.hasUsbCamera()){ //mServer.reopenCamera(); - } + //} } @Override @@ -334,9 +330,32 @@ public class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal mServiceHealthMonitor.record(); } + @Override + public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height){ + if(mServer != null){ + mServer.startPreview(holder); + } + } + private void restartApplication() { final Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } + + private void toggleFullScreen (){ + View decorView = getWindow().getDecorView(); + if(!isFullScreen) { + decorView.setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); + } else { + decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_VISIBLE); + } + isFullScreen = !isFullScreen; + } }