package com.example.audiocapture;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContract;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.projection.MediaProjectionManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.example.audiocapture.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private final String TAG = "MainActivity";
private final int REQUEST_PERMISSIONS_RETURN_CODE = 10;
private String[] mPermissions = {
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.RECORD_AUDIO
};
private ActivityResultLauncher<Object> mActivityResultLauncher;
boolean mRecording;
boolean mPlaying;
private ActivityMainBinding mBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
mActivityResultLauncher = registerForActivityResult(mActivityResultContract, mActivityResultCallback);
mBinding.btnRecord.setOnClickListener(mOnClickListener);
mBinding.btnPlay.setOnClickListener(mOnClickListener);
requestPermissions();
}
private final View.OnClickListener mOnClickListener = view -> {
if (view.getId() == R.id.btn_record) {
if (mPlaying) {
return;
}
if (mRecording) {
mRecording = false;
mBinding.btnRecord.setText("Record");
Intent intent = new Intent(MainActivity.this, AudioCaptureService.class);
stopService(intent);
} else {
mRecording = true;
mBinding.btnRecord.setText("Stop");
mActivityResultLauncher.launch(null);
}
} else if (view.getId() == R.id.btn_play) {
if (mRecording) {
return;
}
Intent intent = new Intent(MainActivity.this, AudioPlayService.class);
if (mPlaying) {
mPlaying = false;
mBinding.btnPlay.setText("Play");
stopService(intent);
} else {
mPlaying = true;
mBinding.btnPlay.setText("Stop");
startForegroundService(intent);
}
}
};
private void requestPermissions() {
try {
ActivityCompat.requestPermissions(this, mPermissions, REQUEST_PERMISSIONS_RETURN_CODE);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSIONS_RETURN_CODE) {
if (grantResults.length == 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Log.e("onRequestPermissionsResult", "Permissions Denied!");
}
}
}
private final ActivityResultContract<Object, ActivityResult> mActivityResultContract = new ActivityResultContract<Object, ActivityResult>() {
@NonNull
@Override
public Intent createIntent(@NonNull Context context, Object o) {
MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);
return mediaProjectionManager.createScreenCaptureIntent();
}
@Override
public ActivityResult parseResult(int code, @Nullable Intent intent) {
return new ActivityResult(code, intent);
}
};
private final ActivityResultCallback<ActivityResult> mActivityResultCallback = result -> {
Intent intent = new Intent(MainActivity.this, AudioCaptureService.class);
intent.putExtra("resultCode", result.getResultCode());
intent.putExtra("data", result.getData());
startForegroundService(intent);
};
}
没有合适的资源?快使用搜索试试~ 我知道了~
android音频内录
共61个文件
xml:16个
webp:10个
properties:7个
2 下载量 90 浏览量
2023-07-30
18:09:50
上传
评论
收藏 343KB ZIP 举报
温馨提示
Android Studio完整工程 开发环境:android studio 2022.2.1 Android版本: android 13 API: AudioRecord AudioPlaybackCaptureConfiguration MediaProjection
资源推荐
资源详情
资源评论
收起资源包目录
AudioCapture.zip (61个子文件)
AudioCapture
.gradle
8.0
fileChanges
last-build.bin 1B
checksums
md5-checksums.bin 18KB
sha1-checksums.bin 19KB
checksums.lock 17B
executionHistory
executionHistory.bin 948KB
executionHistory.lock 17B
dependencies-accessors
gc.properties 0B
dependencies-accessors.lock 17B
fileHashes
fileHashes.lock 17B
resourceHashesCache.bin 19KB
fileHashes.bin 68KB
gc.properties 0B
vcsMetadata
buildOutputCleanup
cache.properties 49B
buildOutputCleanup.lock 17B
outputFiles.bin 22KB
vcs-1
gc.properties 0B
file-system.probe 8B
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 58KB
gradle-wrapper.properties 230B
app
src
androidTest
java
com
example
audiocapture
ExampleInstrumentedTest.java 762B
test
java
com
example
audiocapture
ExampleUnitTest.java 385B
main
java
com
example
audiocapture
AudioPlayService.java 3KB
AudioCaptureService.java 4KB
MainActivity.java 5KB
res
mipmap-xxhdpi
ic_launcher_round.webp 6KB
ic_launcher.webp 3KB
mipmap-hdpi
ic_launcher_round.webp 3KB
ic_launcher.webp 1KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 343B
ic_launcher_round.xml 343B
values-night
themes.xml 332B
mipmap-mdpi
ic_launcher_round.webp 2KB
ic_launcher.webp 982B
mipmap-xxxhdpi
ic_launcher_round.webp 8KB
ic_launcher.webp 4KB
mipmap-xhdpi
ic_launcher_round.webp 4KB
ic_launcher.webp 2KB
xml
data_extraction_rules.xml 551B
backup_rules.xml 478B
values
colors.xml 147B
strings.xml 74B
themes.xml 408B
layout
activity_main.xml 1KB
drawable
ic_launcher_background.xml 5KB
AndroidManifest.xml 1KB
proguard-rules.pro 750B
libs
build.gradle 1KB
.gitignore 6B
gradlew.bat 3KB
build.gradle 229B
.idea
workspace.xml 5KB
misc.xml 433B
compiler.xml 169B
gradle.xml 612B
.gitignore 47B
settings.gradle 329B
local.properties 435B
gradlew 6KB
.gitignore 225B
共 61 条
- 1
资源评论
wake_
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功