2024.5.24

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;
}
}
posted @   我也不想的  阅读(3)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示