From a648920edfe566c3645672eba953e076ba5cac39 Mon Sep 17 00:00:00 2001 From: obarong Date: Wed, 15 Apr 2020 17:44:51 +0800 Subject: [PATCH] Add runtime request permission for sdk26. Add keystore.jks. --- app/build.gradle | 14 ++++- .../net/ossrs/yasea/demo/MainActivity.java | 57 +++++++++++++++--- keystore.jks | Bin 0 -> 2052 bytes library/build.gradle | 2 +- 4 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 keystore.jks diff --git a/app/build.gradle b/app/build.gradle index fb78768..9740c85 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,19 +6,31 @@ android { defaultConfig { applicationId "net.ossrs.yasea.demo" minSdkVersion 18 - targetSdkVersion 22 + targetSdkVersion 26 versionCode 1 versionName "2.6" ndk { abiFilters "armeabi-v7a", "arm64-v8a", "x86", "mips" } } + // 签名配置 + signingConfigs { + config { + keyAlias 'key0' + keyPassword '123456' + storeFile file('../keystore.jks') + storePassword '123456' + } + } + buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.config } } + } dependencies { diff --git a/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java b/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java index 82b7227..7b8ae72 100644 --- a/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java +++ b/app/src/main/java/net/ossrs/yasea/demo/MainActivity.java @@ -1,11 +1,16 @@ package net.ossrs.yasea.demo; +import android.Manifest; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.hardware.Camera; +import android.os.Build; import android.os.Bundle; import android.os.Environment; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.Menu; @@ -32,6 +37,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL SrsRecordHandler.SrsRecordListener, SrsEncodeHandler.SrsEncodeListener { private static final String TAG = "Yasea"; + public final static int RC_CAMERA = 100; private Button btnPublish; private Button btnSwitchCamera; @@ -48,6 +54,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL private int mWidth = 640; private int mHeight = 480; + private boolean isPermissionGranted = false; @Override protected void onCreate(Bundle savedInstanceState) { @@ -59,6 +66,41 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL // response screen rotation event setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); + requestPermission(); + } + + private void requestPermission() { + //1. 检查是否已经有该权限 + if (Build.VERSION.SDK_INT >= 23 && (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) + != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) + != PackageManager.PERMISSION_GRANTED)) { + //2. 权限没有开启,请求权限 + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, RC_CAMERA); + }else{ + //权限已经开启,做相应事情 + isPermissionGranted = true; + init(); + } + } + + //3. 接收申请成功或者失败回调 + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == RC_CAMERA) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + //权限被用户同意,做相应的事情 + isPermissionGranted = true; + init(); + } else { + //权限被用户拒绝,做相应的事情 + finish(); + } + } + } + + private void init() { // restore data. sp = getSharedPreferences("Yasea", MODE_PRIVATE); rtmpUrl = sp.getString("rtmpUrl", rtmpUrl); @@ -74,7 +116,7 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL btnPause = (Button) findViewById(R.id.pause); btnPause.setEnabled(false); mCameraView = (SrsCameraView) findViewById(R.id.glsurfaceview_camera); - + mPublisher = new SrsPublisher(mCameraView); mPublisher.setEncodeHandler(new SrsEncodeHandler(this)); mPublisher.setRtmpHandler(new RtmpHandler(this)); @@ -83,15 +125,15 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL mPublisher.setOutputResolution(mHeight, mWidth); // 这里要和preview反过来 mPublisher.setVideoHDMode(); mPublisher.startCamera(); - + mCameraView.setCameraCallbacksHandler(new SrsCameraView.CameraCallbacksHandler(){ @Override public void onCameraParameters(Camera.Parameters params) { - //params.setFocusMode("custom-focus"); + //params.setFocusMode("custom-focus"); //params.setWhiteBalance("custom-balance"); //etc... } - }); + }); btnPublish.setOnClickListener(new View.OnClickListener() { @Override @@ -249,12 +291,12 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL @Override protected void onStart() { super.onStart(); - if(mPublisher.getCamera() == null){ + if(mPublisher.getCamera() == null && isPermissionGranted){ //if the camera was busy and available again mPublisher.startCamera(); } - } - + } + @Override protected void onResume() { super.onResume(); @@ -447,4 +489,5 @@ public class MainActivity extends AppCompatActivity implements RtmpHandler.RtmpL public void onEncodeIllegalArgumentException(IllegalArgumentException e) { handleException(e); } + } diff --git a/keystore.jks b/keystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..d124a003fcf06e57d3508db4e325517162021ee5 GIT binary patch literal 2052 zcmV+f2>bW`?f&fm0006200031000311Z!n^FaQ7naK3k7a{vGZ05F0C{4fp%3M&Qy z1OX}n5di@O00e>r=plj49xPCFQt0H!Fm}rHlkE;P7*I_awY}fnYAP%>6a^{|LSV(d z1s_O17#({e+~-ui(DE?R$xu%2$4>4A;Iy*{Zq^5uTi+m5(O+I=Zrr7>9*D~Tj~OX> z=CLK4I`4th#X549pZ!fs=i0~IVSf3}>v=j`B8l-HhB>*qhe%&tc`>&TtYF9hlyCWp zP*Pq|&vn>eS|Ap`6}~QJQPAx#WJqtH?0omu7`;6E_2xUIm5ZkZ_BhQxsAk%c6@pwE zW>+gORO@j>Wk5YZhu)X6Xf$&&R}{*1J5%etmHyFk%9L4lHm$H2sq ze1h|ZoW$4$h6si>CkuEoBKG^(L)u6h=?~!REEmTXB~TtEL5@VG3#6an{C50!#|@gx zJ{HqC{nV8A@Kh%ZWzDcB-#Kp6-*GcB+?8$Gg@<$O?N02Tkot96oAv~0P~cH}Jvlkv zKE{VhdfVfYxoSIJL-sUwBR5{S%DWG44^;`K`gH#J8>1So4UBdF6=rB4RrW|s+nN(0 zSXoiO)uUu_Wi(l2*yg;2qW~jS=;wOqi3vYEu{ge18HeQUxU$Vp%;td)mgy*%!eC5` z_t?im%&3=}lR``uWN!>qcsNe3b}&+d?uex!R%+lHx27bYf;grHfOS!O<6e5{5Mz}z z4bPQxK{vzY?Gd&wiu*nT5jUXoMUrsr(q#I15OoNuz5nc`Sy4iBRU*Vz5ncJn5JnY0_q{w2w`00n}XHWc3lOKZ8~G?3KlXLy;XYKGUc^6gxNE0a>e<6@LW2 zOo{0|jJ$W^y)|pCFUd8fz}5AQ&Hzc$Lz&SNk6j`#vg>D|&=5EK$sw9k7js+2<#1zI z7Tb{1{Ouwncb`?QtJ%V{VjEMRU(!I!%e{U;Xmk67)NKDk?GHbXrQN3sx=!|+67_av zS$9#@3kYwtyw?x2neJoKCk2X>dB}f=2BpR7D7Y>a6G7B9GRAG1=Ta|rBhr}kUC6m0 z8$vH)1#6`|07BdE{7l7kgHqtA`}1hR|MAQ+yf|hhedb#3@<$vK1duP6)IEENXfa1l zFy5qZGS%K8+*(_MEe5VxB~ziMWP5&O_H48*b>uYn;$%V^Eg78&hCM5SDcD$J6u}b* z`q@yev!B3coTl4e4h57ID`sP+B47z6mCf{ zCE4a_ZdL?k6QVq4F(A+hDe6@4FLfQ1pqJ(F$^#Y1_M&LNQUThc+jy@mk+V_Rg0-dwf~tlBz+k zX-YDzkg&}Ki`2rgDiN>ehr**>Go|R>wQ*=s6&p~`9Y3l;d$`H{T<~7&1B6sC4F(A+ zhDe6@4FLfQ1potr0RaGU!PdX*k)pYJex+0Bw`62IpZp@o?AXgsUR8uHJ@s~xP{`(6 zS}LXk~e#*rk4>Kki&J-T@lrfCo727MfVQgVf}ubBd`(5