接听电话骚扰信息——硅基接待过滤(8)—东方仙盟

东方仙盟接听电话主界面代码
package com.fairyalliance.smartanswer;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Environment;
import java.io.File;
import java.io.FileOutputStream;
import android.content.pm.PackageManager;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import CyberWinPHP.Cyber_CPU.Cyber_Public_Var;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.view.View;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.media.AudioAttributes;
import android.media.AudioManager;
public class MainActivity extends AppCompatActivity {
private static final String[] PERMISSIONS_老的 = {
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_CONTACTS
};
// 仅保留 能动态授权、必须授权、不会失效 的权限
private static final String[] PERMISSIONS = {
Manifest.permission.READ_PHONE_STATE, // 必须:检测来电
Manifest.permission.READ_CONTACTS, // 必须:读取联系人
Manifest.permission.WRITE_CONTACTS, // 可选:修改联系人
Manifest.permission.READ_EXTERNAL_STORAGE ,// 必须:读取文件/录音
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
private static final int REQUEST_MANAGE_ALL_FILES_PERMISSION = 4;
private static final int PERMISSION_CODE = 100;
// 音频文件名(res/raw 目录下)
public String audioFileName = "fams_aa_dc_01";
public String defaultAudio = "fams_aa_default";
public String audioFileName2 = "fams_aa_jyyq_01";
public String audioFileName3 = "fams_aa_default";
public String audioFileName5 = "fams_aa_dc_03";
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
CyberWinLogToFile.init(this);
writelog("MainActivity","jt","启动开始");
setContentView(R.layout.activity_main);
writelog("MainActivity","jt","布局");
// 申请存储、通讯录权限
// 检查并申请权限
/*
if (!hasPermissions()) {
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_CODE);
}
*/
Toast.makeText(this, "点击屏幕开启无障碍", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
writelog("MainActivity","jt","布局"+ e.getMessage());
}
}
//2026-04-22
/**
* 检查是否拥有所有权限
*/
private boolean hasPermissions() {
for (String p : PERMISSIONS) {
if (ContextCompat.checkSelfPermission(this, p) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
/**
* 【必须重写】权限申请结果回调
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_CODE) {
boolean allGranted = true;
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
allGranted = false;
break;
}
}
if (allGranted) {
Toast.makeText(this, "权限已全部授权", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "请授权所有权限才能使用", Toast.LENGTH_SHORT).show();
}
}
}
/**
* 【可选但推荐重写】页面返回时刷新
*/
@Override
protected void onResume() {
super.onResume();
}
private void 仙盟_权限_判断_文件权限() {
// 检查系统版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// 检查是否已经拥有管理所有文件的权限
if (!android.os.Environment.isExternalStorageManager()) {
// 请求管理所有文件的权限
Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivityForResult(intent, REQUEST_MANAGE_ALL_FILES_PERMISSION);
} else {
Toast.makeText(this, "已经拥有管理所有文件的权限", Toast.LENGTH_SHORT).show();
}
} else {
// 对于 Android 10 及以下版本,不需要该权限
Toast.makeText(this, "此设备不需要管理所有文件的权限", Toast.LENGTH_SHORT).show();
}
}
private void 仙盟_加载_判断文件夹(){
try {
// 创建 File 对象
String filePath = "/cyberwin/归一编程/1.html";
String filePath1 = "/cyberwin";
File file = new File(Environment.getExternalStorageDirectory(), filePath1);
if (!file.exists()) {
file.mkdirs();
}
String filePath2 = "/cyberwin/归一编程";
File file2 = new File(Environment.getExternalStorageDirectory(), filePath2);
if (!file2.exists()) {
file2.mkdirs();
}
}catch (Exception e) {
Toast.makeText(this, "文件写入失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_MANAGE_ALL_FILES_PERMISSION) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (android.os.Environment.isExternalStorageManager()) {
Toast.makeText(this, "已成功获取管理所有文件的权限", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "未获取到管理所有文件的权限", Toast.LENGTH_SHORT).show();
}
}
}
}
// 核心日志方法:writelog(type, name, msg);
private void writelog(String type, String name, String msg) {
try {
// 1. 时间格式化:yyyy-MM-dd HH:mm:ss
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
// String time = sdf.format(new Date());
// 2. 日志内容
// String logContent = time + " | " + type + " | " + name + " | " + msg + "\n";
String logContent = type + " | " + name + " | " + msg + "\n";
CyberWinLogToFile.d_windows(type,name,logContent);
} catch (Exception e) {
// 不处理,避免崩溃
}
}
//2026-04-23
// ---------------------- 音频播放 ----------------------
public void playDefaultAudio(View view) {
playRawAudio(defaultAudio);
}
public void playAudio2(View view) {
playRawAudio(audioFileName2);
}
public void playAudio3(View view) {
playRawAudio(audioFileName3);
}
//
public void playAudio5(View view) {
playRawAudio(audioFileName5);
}
// 播放 raw 下的音频(通用方法)
private void playRawAudio(String fileName) {
try {
// 先停止上一个
if (mediaPlayer != null) {
mediaPlayer.release();
}
// 获取音频 ID
int resId = getResources().getIdentifier(fileName, "raw", getPackageName());
mediaPlayer = MediaPlayer.create(this, resId);
mediaPlayer.start();
Toast.makeText(this, "正在播放:" + fileName, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(this, "播放失败:音频文件不存在", Toast.LENGTH_SHORT).show();
}
}
public void playAudio2byphone(View view) {
try {
// 先释放上一个
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
AudioManager am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
未来之窗_设置接电话AudioManager(am);
int resId = getResources().getIdentifier(audioFileName2, "raw", getPackageName());
mediaPlayer = MediaPlayer.create(this, resId);
// ======================
// 关键:强制使用 电话通话声道
// ======================
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mediaPlayer.setAudioAttributes(
new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) // 电话通道
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()
);
} else {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); // 旧版本
}
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); // 设置音频流为通话流
mediaPlayer.start();
Toast.makeText(this, "电话通道播放:" + audioFileName2, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(this, "播放失败", Toast.LENGTH_SHORT).show();
}
}
private void 未来之窗_设置接电话AudioManager(AudioManager am) {
am.setMode(AudioManager.MODE_IN_CALL);
am.setMode(AudioManager.MODE_IN_COMMUNICATION);
am.setSpeakerphoneOn(true);
}
// ---------------------- 权限授权 ----------------------
public void grantStoragePermission(View view) {
/*
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERM_CODE);
} else {
Toast.makeText(this, "文件权限已授权", Toast.LENGTH_SHORT).show();
}
*/
仙盟_权限_判断_文件权限();
}
public void grantAllPermissions(View view) {
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_CODE);
/*
if (!hasAllPermissions()) {
ActivityCompat.requestPermissions(this, PERMISSIONS, ALL_PERM_CODE);
} else {
Toast.makeText(this, "全部权限已授权", Toast.LENGTH_SHORT).show();
}
*/
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fairy Alliance answer"
android:textSize="22sp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放应答默认语音"
android:onClick="playDefaultAudio"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放应答 2"
android:onClick="playAudio2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放应答 3"
android:onClick="playAudio3"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放应答 5"
android:onClick="playAudio5"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="接听模式 2"
android:onClick="playAudio2byphone"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="授权文件权限"
android:onClick="grantStoragePermission"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="授权全部权限"
android:onClick="grantAllPermissions"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fairy Alliance 东方仙盟 5400款应用 混沌系统"
android:textSize="22sp"/>
</LinearLayout>
人人皆为创造者,共创方能共成长
每个人都是使用者,也是创造者;是数字世界的消费者,更是价值的生产者与分享者。在智能时代的浪潮里,单打独斗的发展模式早已落幕,唯有开放连接、创意共创、利益共享,才能让个体价值汇聚成生态合力,让技术与创意双向奔赴,实现平台与伙伴的快速成长、共赢致远。
原创永久分成,共赴星辰大海
原创创意共创、永久收益分成,是东方仙盟始终坚守的核心理念。我们坚信,每一份原创智慧都值得被尊重与回馈,以永久分成锚定共创初心,让创意者长期享有价值红利,携手万千伙伴向着科技星辰大海笃定前行,拥抱硅基 生命与数字智能交融的未来,共筑跨越时代的数字文明共同体。
东方仙盟:拥抱知识开源,共筑数字新生态
在全球化与数字化浪潮中,东方仙盟始终秉持开放协作、知识共享的理念,积极拥抱开源技术与开放标准。我们相信,唯有打破技术壁垒、汇聚全球智慧,才能真正推动行业的可持续发展。
开源赋能中小商户:通过将前端异常检测、跨系统数据互联等核心能力开源化,东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案,让更多商家能够平等享受数字转型的红利。
共建行业标准:我们积极参与国际技术社区,与全球开发者、合作伙伴共同制定开放协议 与技术规范,推动跨境零售、文旅、餐饮等多业态的系统互联互通,构建更加公平、高效的数字生态。
知识普惠,共促发展:通过开源社区 、技术文档与培训体系,东方仙盟致力于将前沿技术转化为可落地的行业实践,赋能全球合作伙伴,共同培育创新人才,推动数字经济 的普惠式增长
阿雪技术观
在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者 。无论是分享代码、撰写技术博客,还是参与开源项目 维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基 生命,为科技进步添砖加瓦。
Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets , hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)