引自免费微信小程序:皆我百晓生
在Android Studio中集成实时音视频,并调用屏幕分享出现"ERR_SCREEN_share_not_authenticated - 102015"错误时,主要原因是目标API版本不兼容导致的权限限制问题。TRTC API 是 Google 提供的音频、视频通话和屏幕共享功能,它主要用于设备之间的高清音频和视频传输。以下是解决此问题的详细步骤:
1. 检查 compileSdkVersion 和 targetSdkVersion 设置
确保你的 Android 开发环境已经正确安装了最新版本的 Android SDK 并且这两个版本都与你的项目的目标 API(例如,33 或更高)匹配。你可以通过以下命令更新 your-sdk.sh 文件中的这些值:
./gradlew updateReleaseAndroid
这将下载并更新到你当前项目中的 latest-release-release-android 目录下的 android-jdk 'stable'。
2. 检查 Trtc 库的版本与你的 project 的 Target API Level 适配
你需要确认 Trtc 库所依赖的版本与你的项目目标 API 权限要求保持一致。请参阅以下 Trtc 官方文档中的关于目标 API 版本与库版本关系的部分:
- https://trtc.github.io/trtc-api-docs/releases/v0.7.13/
按照以下步骤检查 Trtc 在你项目的源码目录中的版本:
a. 打开 build.gradle
文件,找到 <dependencies>
子句:
```groovy
implementation 'com.google.android.media:media-api:26.1.4'
implementation 'com.google.android.gms:play-services-media:18.1.0'
implementation 'com.google.android.googleglass:google-glass-auth:0.1.1'
implementation 'com.google.android.material:material:1.5.0-alpha07'
```
b. 查看以下依赖项中的 API 版本:
```
implementation 'com.google.android.googleglass:google-glass-auth:[18.1.0]'
implementation 'com.google.android.material:material:[1.5.0-alpha07]'
```
c. 如果使用的是 Android 10 或更高版本,确定与 API 版本相对应的最小 SDK version 是否已包含目标 API 的最低版本号:
```java
minSdkVersion = context.getBuildConfigMinSdk();
targetSdkVersion = context.getBuildConfigTargetSdk();
```
d. 如果目标 API 是 Android 10 及以下版本,则保证 >= 29。例如,目标 API 是 26,那么 Trtc 库至少需要支持 Android 26 级别:
```java
minSdkVersion = 26;
targetSdkVersion = 29;
```
3. 解决目标 API 版本与 Trtc 库版本冲突的问题
-
更换编译 SDK 版本
a. 更新 build.gradle
文件中的 dependencies
命令,从上述 implementation 'com.google.android.media:media-api:26.1.4'
更改为:
```groovy
implementation 'com.google.android.media:media-api:26.1.4 (>= 29)'
implementation 'com.google.android.gms:play-services-media:18.1.0 (>= 29)'
implementation 'com.google.android.googleglass:google-glass-auth:0.1.1 (>= 29)'
implementation 'com.google.android.material:material:1.5.0-alpha07 (>= 29)'
```
-
检查 Trtc 调用位置
确保 TRTC 库函数能够正确地访问和处理正确的 API 层面。特别是在 startStreaming()
方法中,如以下所示的代码示例:
public void startStreaming(
MediaSession mediaSession,
String audioOutputId,
CameraMetadata cameraMetadata) {
Log.d(TAG, "Starting streaming session");
try {
TrtcMediaSession.MediaStreamRequest.Builder builder =
new TrtcMediaSession.MediaStreamRequest.Builder(mediaSession)
.setAudioOutputId(audioOutputId)
.setCameraMetadata(cameraMetadata);
if (cameraMetadata != null && !cameraMetadata.hasAppInfo()) {
cameraMetadata.setAppInfo(
new MediaMetadata.Builder()
.setCategory(MediaMetadata.CATEGORY_AUDIO)
.setApplicationName("Your App Name")
.build());
}
// 创建 TrtcMediaSession.Session.Builder 对象并构建用于发送请求的 ObjectBuilder
TrtcMediaSession.Session.Builder sessionBuilder = TrtcMediaSession.Session.newBuilder();
// 添加 request builder to the session builder
sessionBuilder.setMediaStreamRequests(builder.build());
// 设置 MediaSession 中预定义的初始监听器
MediaSession.setInitialEventListener(
new MediaSession.InitialListener() {
@Override
public void onMediaSessionCreated(
MediaSession mediaSession) {
Log.d(TAG, "Media session created");
// ...
}
});
// 构建 TrtcMediaSession.Session对象并发送给 MediaSession
mediaSession.startSession(sessionBuilder.build());
} catch (Exception e) {
Log.e(TAG, "Error starting streaming session", e);
// 处理异常并重新尝试启动会话
try {
mediaSession.startSession(
sessionBuilder.build());
} catch (Exception reExeption) {
Log.e(TAG, "Error starting streaming session after retries", reExeption);
throw reExeption;
}
}
}
- 更新配置文件(application.properties / gradle.properties)
如果尚未应用或修改 application.properties
文件中的 TRTC_CLIENT_KEY
和 TRTC_CLIENT_SECRET
字段,确保它们的值与提供的 JSON 键相匹配。根据上面的代码示例,你应该在 application.properties
文件中添加以下配置:
TRTC_CLIENT_KEY=your_client_key_here
TRTC_CLIENT_SECRET=your_client_secret_here
确保在 build.gradle
文件的插件层中引入以下 com.google.android.gms:trtc:singleplayer
插件,并替换其中的 YOUR_TRTC_API_KEY
、YOUR_TRTC_API_SECRET
和 YOUR_TRTC_STREAMING_ENDPOINT
值与对应的 JSON 键对应:
dependencies {
implementation 'com.google.android.gms:trtc:singleplayer:29.0.0'
}
运行 ./gradlew clean build
以删除在编译过程中产生的临时依赖,然后重新进行构建以反映以上更改:
./gradlew clean build
4. 重新初始化目标 API 环境
若首次出现问题,可能是因为目标 API 环境未被初始化。首先,确保已经正确启用目标 API 环境:
a. 在 AndroidManifest.xml 文件中添加以下 `uses-permission` 标签以允许目标 API 接入系统权限:
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.MANAGE_SIMS"/>
b. 确保目标 API 环境已存在于你的项目中:
a. 使用 Android Studio Pro 工具包或 Git 分支管理工具(如 GitLab or GitHub)查询项目的 build.gradle 文件内容:
```
cd your_project_directory
find . -name 'build.gradle'
```
或者
```
git clone https://github.com/LiteAVSDK/TRTC.git
cd trtc
```
b. 找到你的 build.gradle 文件中的 `apply plugin: 'com.google.android.gms:trtc:singleplayer'` 和相应的 `.gradle` 文件,并打开 `build.gradle` 文件并编辑以下内容:
```groovy
apply plugin: 'com.google.android.gms:trtc:singleplayer'
dependencies {
implementation 'com.google.android.gms:play-services-media:18.1.0'
implementation 'com.google.android.googleglass:google-glass-auth:0.1.1'
implementation 'com.google.android.material:material:1.5.0-alpha07'
implementation 'com.google.android.gms:recyclerview-v7:18.0.0'
implementation 'com.google.firebase:firebase-messaging:24.0.0'
implementation 'com.google.android.gms:firestore-gson:19.0.0'
implementation 'com.google.firebase:firebase-auth:24.0.0'
implementation 'com.google.firebase:firebase-analytics:24.0.0'
implementation 'com.google.firebase:firebase-admob-common:24.0.0'
implementation 'com.google.firebase:firebase-database:24.0.0'
implementation 'com.google.firebase:firebase-firestore:24.0.0'
implementation 'com.google.firebase:firebase-bidder-admob-intents:24.0.0'
implementation 'com.google.firebase:firebase-analytics:24.0.0'
implementation 'com.google.firebase:firebase-admob-analytics:24.0.0'
implementation 'com.google.firebase:firebase-iab-provider:24.0.0'
implementation 'com.google.firebase:firebase-appengine-backend-service:24.0.0'
implementation 'com.google.firebase:firebase-crashlytics:24