p更改sos1的代码实现点击sos进入视频界面
ackage com.example.helppeople;
import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import org.webrtc.AudioSource;
import org.webrtc.AudioTrack;
import org.webrtc.Camera1Enumerator;
import org.webrtc.EglBase;
import org.webrtc.MediaConstraints;
import org.webrtc.PeerConnectionFactory;
import org.webrtc.SurfaceTextureHelper;
import org.webrtc.SurfaceViewRenderer;
import org.webrtc.VideoCapturer;
import org.webrtc.VideoSource;
import org.webrtc.VideoTrack;
public class Sos1 extends AppCompatActivity {
private static final int REQUEST_CAMERA_PERMISSION = 200;
private PeerConnectionFactory peerConnectionFactory;
private VideoCapturer videoCapturer;
private VideoTrack localVideoTrack;
private AudioTrack localAudioTrack;
private SurfaceViewRenderer surfaceViewRenderer;
private EglBase eglBase;
private LocationClient mLocationClient;
private SurfaceTextureHelper surfaceTextureHelper;
private boolean isActivityVisible = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sos1);
surfaceViewRenderer = findViewById(R.id.surface_view);
Button sosButton = findViewById(R.id.emergency);
Button mapButton = findViewById(R.id.map);
Button lookButton = findViewById(R.id.look);
eglBase = EglBase.create();
surfaceViewRenderer.init(eglBase.getEglBaseContext(), null);
surfaceViewRenderer.setVisibility(View.GONE);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CAMERA_PERMISSION);
} else {
initializeWebRTC();
startLocation();
}
sosButton.setOnClickListener(v -> startStreamingActivity());
// Add event listeners for map and look buttons
mapButton.setOnClickListener(this::Lookmap);
lookButton.setOnClickListener(this::LookCon);
}
@Override
protected void onStart() {
super.onStart();
isActivityVisible = true;
}
@Override
protected void onStop() {
super.onStop();
isActivityVisible = false;
}
public void Lookmap(View view) {
Intent intent = new Intent(Sos1.this, Sos.class);
if (mLocationClient != null && mLocationClient.getLastKnownLocation() != null) {
intent.putExtra("latitude", mLocationClient.getLastKnownLocation().getLatitude());
intent.putExtra("longitude", mLocationClient.getLastKnownLocation().getLongitude());
}
startActivity(intent);
}
public void LookCon(View view) {
Intent intent = new Intent(Sos1.this, ViewerActivity.class);
startActivity(intent);
}
private void startStreamingActivity() {
Intent intent = new Intent(Sos1.this, StreamingActivity.class);
startActivity(intent);
}
private void initializeWebRTC() {
PeerConnectionFactory.InitializationOptions initializationOptions =
PeerConnectionFactory.InitializationOptions.builder(this)
.createInitializationOptions();
PeerConnectionFactory.initialize(initializationOptions);
PeerConnectionFactory.Options options = new PeerConnectionFactory.Options();
peerConnectionFactory = PeerConnectionFactory.builder()
.setOptions(options)
.createPeerConnectionFactory();
MediaConstraints constraints = new MediaConstraints();
surfaceTextureHelper = SurfaceTextureHelper.create("CaptureThread", eglBase.getEglBaseContext());
videoCapturer = createCameraCapturer(new Camera1Enumerator(false));
VideoSource videoSource = peerConnectionFactory.createVideoSource(videoCapturer.isScreencast());
videoCapturer.initialize(surfaceTextureHelper, this, videoSource.getCapturerObserver());
localVideoTrack = peerConnectionFactory.createVideoTrack("100", videoSource);
localVideoTrack.addSink(surfaceViewRenderer);
AudioSource audioSource = peerConnectionFactory.createAudioSource(constraints);
localAudioTrack = peerConnectionFactory.createAudioTrack("101", audioSource);
}
private void startLocation() {
try {
mLocationClient = new LocationClient(getApplicationContext());
mLocationClient.registerLocationListener(new MyLocationListener());
LocationClientOption option = new LocationClientOption();
option.setIsNeedAddress(true);
mLocationClient.setLocOption(option);
mLocationClient.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
if (bdLocation != null) {
String address = bdLocation.getAddrStr();
showLocationDialog(address);
mLocationClient.stop();
} else {
Toast.makeText(Sos1.this, "获取位置信息失败", Toast.LENGTH_SHORT).show();
}
}
}
private void showLocationDialog(String location) {
// Run on the UI thread
new Handler(Looper.getMainLooper()).post(() -> {
if (isActivityVisible) {
AlertDialog.Builder builder = new AlertDialog.Builder(Sos1.this);
builder.setMessage(location + "有人需要帮助")
.setTitle("位置信息")
.setPositiveButton("确定", (dialog, which) -> dialog.dismiss());
builder.create().show();
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CAMERA_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED &&
grantResults.length > 1 && grantResults[1] == PackageManager.PERMISSION_GRANTED &&
grantResults.length > 2 && grantResults[2] == PackageManager.PERMISSION_GRANTED) {
initializeWebRTC();
startLocation();
} else {
Toast.makeText(this, "需要相机、音频和位置权限", Toast.LENGTH_SHORT).show();
}
}
}
private VideoCapturer createCameraCapturer(Camera1Enumerator enumerator) {
final String[] deviceNames = enumerator.getDeviceNames();
for (String deviceName : deviceNames) {
if (enumerator.isFrontFacing(deviceName)) {
VideoCapturer videoCapturer = enumerator.createCapturer(deviceName, null);
if (videoCapturer != null) {
return videoCapturer;
}
}
}
return null;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人