wxl_branch
徐海麓 2 years ago
parent 36225f1216
commit c021903047

15
src/.gitignore vendored

@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties

@ -0,0 +1 @@
SleepHelper

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" />
<bytecodeTargetLevel target="11" />
</component>
</project>

@ -7,8 +7,6 @@
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="$PROJECT_DIR$/../../../../../soft/gradle/gradle-8.0-all/gradle-8.0" />
<option name="gradleJvm" value="Embedded JDK" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

@ -0,0 +1,38 @@
plugins {
id 'com.android.application'
}
android {
namespace 'com.example.sleephelper'
compileSdk 33
defaultConfig {
applicationId "com.example.sleephelper"
minSdk 31
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sleep">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.SENSOR_INFO" />
<uses-permission android:name="android.permission.SENSOR_ENABLE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<application
android:name="com.example.sleep.App"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activity.LoginActivity"
android:theme="@style/Theme.NoAction"/>
<activity
android:name=".activity.RegisterActivity"
android:theme="@style/Theme.NoAction"/>
<activity
android:name="com.example.sleep.MainScreen"
android:launchMode="standard"
android:theme="@style/Theme.NoAction" />
<activity
android:name="com.example.sleep.Record"
android:launchMode="standard" />
<activity
android:name="com.example.sleep.SleepresultScreen"
android:launchMode="standard" />
<activity
android:name="com.example.sleep.SleepMonitoringScreen"
android:launchMode="standard"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
<activity
android:name="com.example.sleep.AfterSleep"
android:launchMode="singleTask" />
<activity
android:name="com.example.sleep.CalendarPage"
android:theme="@style/Theme.NoAction" />
<service
android:name="com.example.sleep.service.DaemonService"
android:enabled="true"
android:process=":daemon_service" />
<service
android:name="com.example.sleep.service.SensorService"
android:process=":work" />
<service
android:name="com.example.sleep.service.GoSleepService"
android:enabled="true"
android:process=":go_sleep" />
<receiver android:name="com.example.sleep.GoSleepBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service
android:name="com.example.sleep.service.PlayerMusicService"
android:enabled="true"
android:process=":music_service" />
<service
android:name="com.example.sleep.service.MediaService"
android:enabled="true" />
<service
android:name="com.example.sleep.service.AliveJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name="com.example.sleep.service.GrayService"
android:enabled="true"
android:process=":gray_service" />
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
<activity
android:name=".EditScreen"/>
<receiver android:name=".AlarmReceiver" />
</application>
</manifest>

@ -0,0 +1,116 @@
package com.example.sleep.sensors;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;
import android.widget.Toast;
import com.example.sleep.database.GetRecord;
import com.example.sleep.database.RecordBean;
import java.util.Calendar;
import static android.content.ContentValues.TAG;
import static com.example.sleep.database.GetRecord.getRecord;
public class Sensors {
private int deepTime; // 深度睡眠时间
private int swallowTime; // 浅层睡眠时间
private int awakeTime; // 清醒时间
private int size = 0; // 计数器
private float k = 0; // 欧氏距离
private SensorManager mSensorManager; // 传感器管理器
private Sensor Accelerometer; // 加速度传感器
private RecordBean mRecord; // 记录数据的Bean类
private GetRecord mGetRecord; // 获取记录的类
// 构造函数,初始化传感器管理器和开始传感器监听
public Sensors(Context context, RecordBean mRecord) {
getSensorManager(context);
startSensor();
this.mRecord = mRecord;
mGetRecord = getRecord();
}
/**
*
*/
private SensorEventListener listener = new SensorEventListener() {
// 传感器精度变化回调方法
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
// 传感器数值变化回调方法
public void onSensorChanged(SensorEvent event) {
float x, y, z;
if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
x = event.values[0];
y = event.values[1];
z = event.values[2];
++size; // 计数器加一
k += (float) Math.sqrt(x * x + y * y + z * z); // 欧氏距离累加
System.out.println("k: " + k);
if (size == 600) { // 每收集600个数据进行处理
size = 0;
k /= 3f; // 欧氏距离求平均
if (k > 1.0f)
k = k / 20 + 1.0f; // 根据欧氏距离计算睡眠状态
if (k >= 5.01f)
++awakeTime; // 清醒时间加一
else if (k >= 2.01f)
++swallowTime; // 浅层睡眠时间加一
else
++deepTime; // 深度睡眠时间加一
Log.e(TAG, "onSensorChanged: go k: " + k);
if (k >= 10)
k /= 10;
Log.e(TAG, "onSensorChanged: go");
mGetRecord.update(mRecord, getTime() + "," + k + " "); // 更新记录数据
k = 0; // 重置欧氏距离
}
}
}
};
// 获取传感器管理器
private void getSensorManager(Context context) {
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
if (mSensorManager != null) {
Accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); // 获取加速度传感器
} else {
Toast.makeText(context, "无法获取传感器,请在设置中授权!", Toast.LENGTH_SHORT).show();
}
}
// 开始传感器监听
private void startSensor() {
if (mSensorManager != null) {
mSensorManager.registerListener(listener, Accelerometer, 100000); // 监听加速度传感器
}
}
// 停止传感器监听
public int[] stopSensor() {
if (mSensorManager != null) {
mSensorManager.unregisterListener(listener);
}
size = 0; // 重置计数器
return new int[]{deepTime, swallowTime, awakeTime}; // 返回睡眠时间数据
}
// 获取当前时间
private String getTime() {
int TimeDay;
int TimeHour;
int TimeMin;
Calendar calendar = Calendar.getInstance();
TimeDay = calendar.get(Calendar.DAY_OF_YEAR);
TimeHour = calendar.get(Calendar.HOUR_OF_DAY);
TimeMin = calendar.get(Calendar.MINUTE);
return String.valueOf(TimeDay * 1440 + TimeHour * 60 + TimeMin); // 返回当前时间的分钟数
}
}

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

@ -2,5 +2,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

@ -0,0 +1,16 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.SleepHelper" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_200</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>

@ -0,0 +1,3 @@
<resources>
<string name="app_name">SleepHelper</string>
</resources>

@ -0,0 +1,16 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.SleepHelper" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>

@ -0,0 +1,5 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
}

@ -1,2 +0,0 @@
#Sat Sep 23 18:12:37 CST 2023
gradle.version=8.0

@ -1,42 +0,0 @@
plugins {
id("com.android.application")
}
android {
namespace = "com.example.dramesleep"
compileSdk = 33
defaultConfig {
applicationId = "com.example.dramesleep"
minSdk = 24
targetSdk = 33
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
dependencies {
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.9.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

@ -1,26 +0,0 @@
package com.example.dramesleep;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.example.dramesleep", appContext.getPackageName());
}
}

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".MyApplication"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Base.Theme.DrameSleep"
tools:targetApi="31">
<activity
android:name=".LoginActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".RegisterActivity"/>
<activity
android:name=".MainActivity"/>
</application>
</manifest>

@ -1,86 +0,0 @@
package com.example.dramesleep;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.dramesleep.db.DBUtils;
public class LoginActivity extends AppCompatActivity {
private EditText usrNameEd;
private EditText passwordEd;
private Button registerBtn;
private Button loginBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
usrNameEd = findViewById(R.id.user_name_edit);
passwordEd = findViewById(R.id.password_name_edit);
loginBtn = findViewById(R.id.login_btn);
registerBtn = findViewById(R.id.register_btn);
initListener();
}
private void initListener() {
registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (true) {
Intent intent = new Intent();
intent.setClass(LoginActivity.this,RegisterActivity.class);
startActivity(intent);
return;
}
if (TextUtils.isEmpty(usrNameEd.getText().toString())) {
Toast.makeText(LoginActivity.this,"请输入用户名",Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(passwordEd.getText().toString())) {
Toast.makeText(LoginActivity.this,"请输入密码",Toast.LENGTH_SHORT).show();
return;
}
String userName = usrNameEd.getText().toString();
String password = passwordEd.getText().toString();
DBUtils.insertData(new UserBean(userName,password));
}
});
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(usrNameEd.getText().toString())) {
Toast.makeText(LoginActivity.this,"请输入用户名",Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(passwordEd.getText().toString())) {
Toast.makeText(LoginActivity.this,"请输入密码",Toast.LENGTH_SHORT).show();
return;
}
String userName = usrNameEd.getText().toString();
String password = passwordEd.getText().toString();
int userId = DBUtils.query(new UserBean(userName,password));
if (userId == -1) {
Toast.makeText(LoginActivity.this,"请输入正确的密码或用户名",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(LoginActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClass(LoginActivity.this,MainActivity.class);
startActivity(intent);
}
}
});
}
}

@ -1,32 +0,0 @@
package com.example.dramesleep;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<SleepBean> dataList;
private RecyclerViewAdapter adapter;
private TextView timeClock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.rl);
timeClock = findViewById(R.id.time_clock);
dataList = Utils.getSleepList();
adapter = new RecyclerViewAdapter(dataList);
recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));
recyclerView.setAdapter(adapter);
}
}

@ -1,18 +0,0 @@
package com.example.dramesleep;
import android.app.Application;
import android.content.Context;
public class MyApplication extends Application {
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getApplicatiopContext(){
return mContext;
}
}

@ -1,50 +0,0 @@
package com.example.dramesleep;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private List<SleepBean> dataList;
public RecyclerViewAdapter(List<SleepBean> dataList) {
this.dataList = dataList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sleep_list, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
SleepBean item = dataList.get(position);
holder.textView.setText(item.text);
holder.imageIcon.setImageResource(item.icon);
}
@Override
public int getItemCount() {
return dataList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final ImageView imageIcon;
public TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.sleep_item_text);
imageIcon = itemView.findViewById(R.id.sleep_item_icon);
}
}
}

@ -1,70 +0,0 @@
package com.example.dramesleep;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.example.dramesleep.db.DBUtils;
public class RegisterActivity extends AppCompatActivity {
private EditText usrNameEd;
private EditText passwordEd;
private Button registerBtn;
private Button loginBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gister);
usrNameEd = findViewById(R.id.user_name_edit);
passwordEd = findViewById(R.id.password_name_edit);
registerBtn = findViewById(R.id.register_btn);
/* Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// 启用返回按钮(显示左上角的返回箭头)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// 设置返回按钮的点击事件
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 在这里处理返回按钮的点击事件,例如返回上一个界面
onBackPressed();
}
});*/
initListener();
}
private void initListener() {
registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(usrNameEd.getText().toString())) {
Toast.makeText(RegisterActivity.this,"请输入用户名",Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(passwordEd.getText().toString())) {
Toast.makeText(RegisterActivity.this,"请输入密码",Toast.LENGTH_SHORT).show();
return;
}
String userName = usrNameEd.getText().toString();
String password = passwordEd.getText().toString();
long id = DBUtils.insertData(new UserBean(userName,password));
if (id != -1) Toast.makeText(RegisterActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
finish();
}
});
}
}

@ -1,11 +0,0 @@
package com.example.dramesleep;
public class SleepBean {
public int icon;
public String text;
public SleepBean(int shequ, String text) {
icon = shequ;
this.text = text;
}
}

@ -1,13 +0,0 @@
package com.example.dramesleep;
import java.io.Serializable;
public class UserBean implements Serializable {
public String userName;
public String userPassword;
public UserBean(String userName, String password) {
this.userName = userName;
this.userPassword = password;
}
}

@ -1,17 +0,0 @@
package com.example.dramesleep;
import java.util.ArrayList;
import java.util.List;
public class Utils {
public static List<SleepBean> getSleepList(){
// 添加一些示例数据
List<SleepBean> dataList = new ArrayList<>();
dataList.add(new SleepBean(R.mipmap.shequ,"社区"));
dataList.add(new SleepBean(R.mipmap.report,"报告"));
dataList.add(new SleepBean(R.mipmap.sleep,"睡眠\n监测"));
dataList.add(new SleepBean(R.mipmap.jiemeng,"解梦"));
dataList.add(new SleepBean(R.mipmap.zhumin,"助眠"));
return dataList;
}
}

@ -1,48 +0,0 @@
package com.example.dramesleep.db;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.dramesleep.MyApplication;
import com.example.dramesleep.UserBean;
public class DBUtils {
public static long insertData(UserBean bean) {
DatabaseHelper dbHelper = new DatabaseHelper(MyApplication.getApplicatiopContext());
SQLiteDatabase db = dbHelper.getWritableDatabase();
String username = bean.userName;
String password = bean.userPassword;
ContentValues values = new ContentValues();
values.put("username", username);
values.put("password", password);
long newRowId = db.insert("users", null, values);
return newRowId;
}
public static int query(UserBean userBean) {
DatabaseHelper dbHelper = new DatabaseHelper(MyApplication.getApplicatiopContext());
SQLiteDatabase db = dbHelper.getWritableDatabase();
String[] projection = {"id"};
String selection = "username = ? AND password = ?";
String[] selectionArgs = {userBean.userName, userBean.userPassword};
Cursor cursor = db.query("users", projection, selection, selectionArgs, null, null, null);
int userId;
if (cursor.moveToFirst()) {
// 用户验证成功
userId = cursor.getInt(cursor.getColumnIndexOrThrow("id"));
// 进行登录后的操作
} else {
// 用户验证失败
// 显示错误消息
userId = -1;
}
cursor.close();
db.close();
return userId;
}
}

@ -1,29 +0,0 @@
package com.example.dramesleep.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "MyAppDatabase";
private static final int DATABASE_VERSION = 1;
// 构造函数
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// 创建表格
@Override
public void onCreate(SQLiteDatabase db) {
String createUserTable = "CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, password TEXT);";
db.execSQL(createUserTable);
}
// 升级数据库
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS users");
onCreate(db);
}
}

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners android:radius="10dp"/>
<stroke
android:width="2dp"
android:color="@color/black"/>
</shape>
</item>
</selector>

@ -1,121 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RegisterActivity"
android:background="#3635B9"
android:theme="@style/AppToolbar">
<!-- <androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#3635B9"
android:theme="@style/AppToolbar"
android:elevation="4dp">
&lt;!&ndash; 返回按钮 &ndash;&gt;
<ImageView
android:id="@+id/backButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/back" />
&lt;!&ndash; 文本字符串 &ndash;&gt;
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"
android:textColor="#000"
android:textSize="20sp"
android:textStyle="bold" />
</androidx.appcompat.widget.Toolbar>-->
<ImageView
android:id="@+id/user_icon"
android:layout_width="62dp"
android:layout_height="62dp"
android:src="@mipmap/user_icon_1"
android:layout_marginTop="60dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="10dp"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"
android:textColor="#000"
android:textSize="30sp"
android:layout_marginLeft="20dp"
app:layout_constraintLeft_toRightOf="@id/user_icon"
app:layout_constraintTop_toTopOf="@id/user_icon"
app:layout_constraintBottom_toBottomOf="@id/user_icon" />
<EditText
android:id="@+id/user_name_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:hint="请输入用户名"
android:textSize="30sp"
android:layout_marginLeft="10dp"
app:layout_constraintLeft_toRightOf="@id/user_name"
app:layout_constraintTop_toTopOf="@id/user_icon"
app:layout_constraintBottom_toBottomOf="@id/user_icon" />
<ImageView
android:id="@+id/password_icon"
android:layout_width="62dp"
android:layout_height="62dp"
android:src="@mipmap/lock"
android:layout_marginTop="40dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="10dp"
app:layout_constraintTop_toBottomOf="@id/user_icon"/>
<TextView
android:id="@+id/password_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
android:textColor="#000"
android:textSize="30sp"
android:layout_marginLeft="20dp"
app:layout_constraintLeft_toRightOf="@id/user_icon"
app:layout_constraintTop_toTopOf="@id/password_icon"
app:layout_constraintBottom_toBottomOf="@id/password_icon" />
<EditText
android:id="@+id/password_name_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:hint="请输入密码"
android:textSize="30sp"
android:layout_marginLeft="10dp"
app:layout_constraintLeft_toRightOf="@id/user_name"
app:layout_constraintTop_toTopOf="@id/password_icon"
app:layout_constraintBottom_toBottomOf="@id/password_icon" />
<Button
android:id="@+id/register_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:text="注册"
android:textSize="30sp"
android:layout_marginTop="40dp"
android:layout_marginRight="20dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/password_icon" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,114 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LoginActivity"
android:background="#3635B9">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="健康睡眠"
android:textColor="#000"
android:textSize="40sp"
android:layout_marginTop="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/user_icon"
android:layout_width="62dp"
android:layout_height="62dp"
android:src="@mipmap/user_icon_1"
android:layout_marginTop="60dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="10dp"
app:layout_constraintTop_toBottomOf="@id/title"/>
<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"
android:textColor="#000"
android:textSize="30sp"
android:layout_marginLeft="20dp"
app:layout_constraintLeft_toRightOf="@id/user_icon"
app:layout_constraintTop_toTopOf="@id/user_icon"
app:layout_constraintBottom_toBottomOf="@id/user_icon" />
<EditText
android:id="@+id/user_name_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:hint="请输入用户名"
android:textSize="30sp"
android:layout_marginLeft="10dp"
app:layout_constraintLeft_toRightOf="@id/user_name"
app:layout_constraintTop_toTopOf="@id/user_icon"
app:layout_constraintBottom_toBottomOf="@id/user_icon" />
<ImageView
android:id="@+id/password_icon"
android:layout_width="62dp"
android:layout_height="62dp"
android:src="@mipmap/lock"
android:layout_marginTop="40dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="10dp"
app:layout_constraintTop_toBottomOf="@id/user_icon"/>
<TextView
android:id="@+id/password_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
android:textColor="#000"
android:textSize="30sp"
android:layout_marginLeft="20dp"
app:layout_constraintLeft_toRightOf="@id/user_icon"
app:layout_constraintTop_toTopOf="@id/password_icon"
app:layout_constraintBottom_toBottomOf="@id/password_icon" />
<EditText
android:id="@+id/password_name_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:hint="请输入密码"
android:textSize="30sp"
android:layout_marginLeft="10dp"
app:layout_constraintLeft_toRightOf="@id/user_name"
app:layout_constraintTop_toTopOf="@id/password_icon"
app:layout_constraintBottom_toBottomOf="@id/password_icon" />
<Button
android:id="@+id/login_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:text="登录"
android:textSize="30sp"
android:layout_marginLeft="10dp"
android:layout_marginTop="40dp"
app:layout_constraintLeft_toLeftOf="@id/password_icon"
app:layout_constraintTop_toBottomOf="@id/password_icon" />
<Button
android:id="@+id/register_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:text="注册"
android:textSize="30sp"
android:layout_marginTop="40dp"
android:layout_marginRight="20dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/password_icon" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="#3635B9">
<Button
android:layout_marginTop="150dp"
android:id="@+id/time_clock_bg"
android:layout_width="200dp"
android:backgroundTint="#4D78A2"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
<TextView
android:layout_marginLeft="20dp"
android:id="@+id/time_clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#7990A6"
android:textSize="25sp"
android:text="19:04:11"
app:layout_constraintTop_toTopOf="@id/time_clock_bg"
app:layout_constraintBottom_toBottomOf="@id/time_clock_bg"
app:layout_constraintLeft_toLeftOf="@id/time_clock_bg" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/time_clock"
android:layout_marginLeft="20dp"
app:layout_constraintTop_toTopOf="@id/time_clock_bg"
app:layout_constraintLeft_toRightOf="@id/time_clock"
app:layout_constraintBottom_toBottomOf="@id/time_clock_bg"/>
<Button
android:layout_marginTop="300dp"
android:id="@+id/start_sleep"
android:layout_width="200dp"
android:text="开始睡眠"
android:textColor="#000"
android:textSize="25sp"
android:backgroundTint="#4D78A2"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/time_clock_bg"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginRight="15dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 添加自定义视图和控件 -->
<ImageView
android:id="@+id/custom_imageview"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerInParent="true"
android:src="@mipmap/back"/>
<TextView
android:id="@+id/custom_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"
android:textSize="25sp"
android:textColor="#000"
android:layout_alignTop="@id/custom_imageview"
android:layout_alignBottom="@id/custom_imageview"
android:layout_toRightOf="@id/custom_imageview"
android:layout_marginLeft="50dp" />
<!-- 还可以添加其他控件 -->
</RelativeLayout>

@ -1,47 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context=".MainActivity"
android:layout_marginBottom="20dp"
android:layout_marginRight="20dp"
android:background="#3635B9">
<ImageView
android:id="@+id/sleep_item_bg"
android:layout_width="120dp"
android:layout_height="150dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:src="@drawable/white_button"/>
<ImageView
android:id="@+id/sleep_item_icon"
android:layout_width="72dp"
android:layout_height="72dp"
app:layout_constraintRight_toRightOf="@id/sleep_item_bg"
app:layout_constraintLeft_toLeftOf="@id/sleep_item_bg"
app:layout_constraintTop_toTopOf="@id/sleep_item_bg"
android:layout_marginTop="10dp"
android:src="@mipmap/report"/>
<TextView
android:id="@+id/sleep_item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/sleep_item_icon"
app:layout_constraintLeft_toLeftOf="@id/sleep_item_bg"
app:layout_constraintRight_toRightOf="@id/sleep_item_bg"
android:text="社区"
android:layout_marginTop="20dp"
android:textSize="25sp"
android:textColor="#000"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 841 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 811 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 927 B

@ -1,7 +0,0 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.DrameSleep" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your dark theme here. -->
<!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
</style>
</resources>

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>

@ -1,3 +0,0 @@
<resources>
<string name="app_name">DrameSleep</string>
</resources>

@ -1,14 +0,0 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.DrameSleep" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your light theme here. -->
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
</style>
<style name="Theme.DrameSleep" parent="Base.Theme.DrameSleep" />
<style name="AppToolbar" parent="Widget.AppCompat.Toolbar">
<item name="android:label">""</item>
</style>
</resources>

@ -1,17 +0,0 @@
package com.example.dramesleep;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}

@ -1,4 +0,0 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.1.1" apply false
}

@ -1,8 +0,0 @@
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Sat Sep 23 21:50:08 CST 2023
sdk.dir=D\:\\Android\\AndriodSDK

@ -1,6 +1,6 @@
#Sat Sep 23 18:11:57 CST 2023
#Fri Nov 10 20:57:04 CST 2023
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

@ -12,7 +12,5 @@ dependencyResolutionManagement {
mavenCentral()
}
}
rootProject.name = "DrameSleep"
include(":app")
rootProject.name = "SleepHelper"
include ':app'
Loading…
Cancel
Save