Skip to content

Commit

Permalink
projects first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
geeklok committed Apr 15, 2019
1 parent c085938 commit f14514c
Show file tree
Hide file tree
Showing 367 changed files with 12,765 additions and 1 deletion.
1 change: 1 addition & 0 deletions Group-Video/Group-Video-Android/app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
34 changes: 34 additions & 0 deletions Group-Video/Group-Video-Android/app/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 28
defaultConfig {
applicationId "com.qiniu.droid.rtc.sample"
minSdkVersion 18
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
disable 'GoogleAppIndexingWarning'
}
}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

// 二维码扫描
implementation 'cn.yipianfengye.android:zxing-library:2.2'
}
Binary file not shown.
21 changes: 21 additions & 0 deletions Group-Video/Group-Video-Android/app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.qiniu.droid.rtc.sample;

import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;

import static org.junit.Assert.*;

/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();

assertEquals("com.qiniu.droid.rtc.sample1v1", appContext.getPackageName());
}
}
42 changes: 42 additions & 0 deletions Group-Video/Group-Video-Android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.qiniu.droid.rtc.sample">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />

<application
android:name="com.qiniu.droid.rtc.sample.RTCApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.qiniu.droid.rtc.sample.MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.qiniu.droid.rtc.sample.RoomActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.uuzuche.lib_zxing.activity.CaptureActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" />
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.qiniu.droid.rtc.sample;

import android.content.Context;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.qiniu.droid.rtc.QNSurfaceView;

public class CustomVideoView extends FrameLayout {
private QNSurfaceView mVideoSurfaceView;
private TextView mUserIdTextView;

public CustomVideoView(Context context) {
super(context);
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(outMetrics);

View view = LayoutInflater.from(context).inflate(R.layout.custom_video_view, this, true);
FrameLayout layout = findViewById(R.id.frame_layout);
layout.getLayoutParams().width = outMetrics.widthPixels / 2;
mVideoSurfaceView = view.findViewById(R.id.video_view);
mUserIdTextView = view.findViewById(R.id.user_id_text_view);
}

public QNSurfaceView getVideoSurfaceView() {
return mVideoSurfaceView;
}

public void setUserId(String userId) {
mUserIdTextView.setText(userId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.qiniu.droid.rtc.sample;

import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.uuzuche.lib_zxing.activity.CaptureActivity;
import com.uuzuche.lib_zxing.activity.CodeUtils;

public class MainActivity extends AppCompatActivity {
private static final int QRCODE_RESULT_REQUEST_CODE = 2;
private EditText mRoomTokenEditText;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mRoomTokenEditText = findViewById(R.id.room_token_edit_text);
}

public void joinRoom(View view) {
// 在进入房间前,必须有相对应的权限,在 Android 6.0 后除了在 Manifest 文件中声明外还需要动态申请权限。
if (!isPermissionOK()) {
Toast.makeText(this, "Some permissions is not approved !!!", Toast.LENGTH_SHORT).show();
return;
}
if (!TextUtils.isEmpty(mRoomTokenEditText.getText())) {
Intent intent = new Intent(this, RoomActivity.class);
intent.putExtra("roomToken", mRoomTokenEditText.getText().toString());
startActivity(intent);
}
}

public void clickToScanQRCode(View view) {
// 扫码也用到了相机权限
if (!isPermissionOK()) {
Toast.makeText(this, "Some permissions is not approved !!!", Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent(this, CaptureActivity.class);
startActivityForResult(intent, QRCODE_RESULT_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2) {
// 处理扫描结果
if (null != data) {
Bundle bundle = data.getExtras();
if (bundle == null) {
return;
}
if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
String result = bundle.getString(CodeUtils.RESULT_STRING);
mRoomTokenEditText.setText(result);
} else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
Toast.makeText(this, "解析二维码失败", Toast.LENGTH_LONG).show();
}
}
}
}

private boolean isPermissionOK() {
PermissionChecker checker = new PermissionChecker(this);
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || checker.checkPermission();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package com.qiniu.droid.rtc.sample;

import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;

import java.util.ArrayList;
import java.util.List;

public class PermissionChecker {
private static final int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;

private Activity mActivity;

public PermissionChecker(Activity activity) {
mActivity = activity;
}

/**
* Check that all given permissions have been granted by verifying that each entry in the
* given array is of the value {@link PackageManager#PERMISSION_GRANTED}.
*
* @see Activity#onRequestPermissionsResult(int, String[], int[])
*/
private boolean verifyPermissions(int[] grantResults) {
// At least one result must be checked.
if (grantResults.length < 1){
return false;
}

// Verify that each required permission has been granted, otherwise return false.
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}

@TargetApi(Build.VERSION_CODES.M)
public boolean checkPermission() {
boolean ret = true;

List<String> permissionsNeeded = new ArrayList<String>();
final List<String> permissionsList = new ArrayList<String>();
if (!addPermission(permissionsList, Manifest.permission.CAMERA)) {
permissionsNeeded.add("CAMERA");
}
if (!addPermission(permissionsList, Manifest.permission.RECORD_AUDIO)) {
permissionsNeeded.add("MICROPHONE");
}
if (!addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
permissionsNeeded.add("Write external storage");
}

if (permissionsNeeded.size() > 0) {
// Need Rationale
String message = "You need to grant access to " + permissionsNeeded.get(0);
for (int i = 1; i < permissionsNeeded.size(); i++) {
message = message + ", " + permissionsNeeded.get(i);
}
// Check for Rationale Option
if (!mActivity.shouldShowRequestPermissionRationale(permissionsList.get(0))) {
showMessageOKCancel(message,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mActivity.requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}
});
}
else {
mActivity.requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}
ret = false;
}

return ret;
}

private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(mActivity)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}

@TargetApi(Build.VERSION_CODES.M)
private boolean addPermission(List<String> permissionsList, String permission) {
boolean ret = true;
if (mActivity.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
ret = false;
}
return ret;
}

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS) {
if (verifyPermissions(grantResults)) {
// all permissions granted
} else {
// some permissions denied
//ToastUtils.s(mActivity, "some permissions denied");
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.qiniu.droid.rtc.sample;

import android.app.Application;

import com.qiniu.droid.rtc.QNLogLevel;
import com.qiniu.droid.rtc.QNRTCEnv;
import com.uuzuche.lib_zxing.activity.ZXingLibrary;

public class RTCApplication extends Application {
@Override
public void onCreate() {
super.onCreate();

// 设置 QNRTC Log 输出等级
QNRTCEnv.setLogLevel(QNLogLevel.INFO);

// SDK 内部有 Log 保存接口,如有需要可开启后将 Log 文件保存到本地
// QNRTCEnv.setLogFileEnabled(true);
// 设置保存文件的最大数量,达到该数量时会自动覆盖,默认值为 3。
// 如果存在 SDCard 且具有权限,将保存在 /sdcard/Android/data/包名/files/QNRTCLog 中,
// 若没有,将保存在 mContext.getFilesDir().getAbsolutePath() + File.separator + "QNRTCLog" 中
// QNRTCEnv.setLogFileMaxCount(3);

// 初始化 QNRTC 环境
QNRTCEnv.init(this);

// 初始化使用的第三方二维码扫描库,与 QNRTC 无关,请忽略
ZXingLibrary.initDisplayOpinion(getApplicationContext());
}
}
Loading

0 comments on commit f14514c

Please sign in to comment.