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 0000000..d124a00 Binary files /dev/null and b/keystore.jks differ diff --git a/library/build.gradle b/library/build.gradle index 401e6f5..cb9740d 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -5,7 +5,7 @@ android { defaultConfig { minSdkVersion 18 - targetSdkVersion 22 + targetSdkVersion 26 versionCode 1 versionName "2.6"