diff --git a/App12/.gitignore b/App12/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/App12/.gitignore @@ -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 diff --git a/App12/.idea/.gitignore b/App12/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/App12/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/App12/.idea/.name b/App12/.idea/.name new file mode 100644 index 0000000..9e13355 --- /dev/null +++ b/App12/.idea/.name @@ -0,0 +1 @@ +App1 \ No newline at end of file diff --git a/App12/.idea/compiler.xml b/App12/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/App12/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/App12/.idea/deploymentTargetDropDown.xml b/App12/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..5bef849 --- /dev/null +++ b/App12/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/App12/.idea/gradle.xml b/App12/.idea/gradle.xml new file mode 100644 index 0000000..0897082 --- /dev/null +++ b/App12/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/App12/.idea/migrations.xml b/App12/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/App12/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/App12/.idea/misc.xml b/App12/.idea/misc.xml new file mode 100644 index 0000000..412f4ec --- /dev/null +++ b/App12/.idea/misc.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/App12/app/.gitignore b/App12/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/App12/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/App12/app/build.gradle b/App12/app/build.gradle new file mode 100644 index 0000000..f72886c --- /dev/null +++ b/App12/app/build.gradle @@ -0,0 +1,42 @@ +plugins { + alias(libs.plugins.androidApplication) +} + +android { + namespace 'com.example.app1' + compileSdk 34 + + + defaultConfig { + applicationId "com.example.app1" + minSdk 21 + targetSdk 34 + 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 libs.appcompat + implementation libs.material + implementation libs.activity + implementation libs.constraintlayout + testImplementation libs.junit + androidTestImplementation libs.ext.junit + androidTestImplementation libs.espresso.core + +} \ No newline at end of file diff --git a/App12/app/proguard-rules.pro b/App12/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/App12/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/App12/app/src/androidTest/java/com/example/app1/ExampleInstrumentedTest.java b/App12/app/src/androidTest/java/com/example/app1/ExampleInstrumentedTest.java new file mode 100644 index 0000000..ab2b7db --- /dev/null +++ b/App12/app/src/androidTest/java/com/example/app1/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.app1; + +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 Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.example.app1", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/App12/app/src/main/AndroidManifest.xml b/App12/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..017abe9 --- /dev/null +++ b/App12/app/src/main/AndroidManifest.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App12/app/src/main/java/com/example/app1/DBHelper.java b/App12/app/src/main/java/com/example/app1/DBHelper.java new file mode 100644 index 0000000..a6f313c --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/DBHelper.java @@ -0,0 +1,88 @@ +package com.example.app1; + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +public class DBHelper extends SQLiteOpenHelper { + + // 数据库名称和版本号 + private static final String DATABASE_NAME = "user_db"; + private static final int DATABASE_VERSION = 1; + + // 表名和列名 + private static final String TABLE_USERS = "users"; + private static final String COLUMN_ID = "id"; + private static final String COLUMN_USERNAME = "username"; + private static final String COLUMN_PASSWORD = "password"; + + // 创建用户表的SQL语句 + private static final String SQL_CREATE_TABLE_USERS = + "CREATE TABLE " + TABLE_USERS + " (" + + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + + COLUMN_USERNAME + " TEXT," + + COLUMN_PASSWORD + " TEXT)"; + + // 构造方法 + public DBHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + // 创建用户表 + db.execSQL(SQL_CREATE_TABLE_USERS); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // 数据库升级时执行的操作(暂不处理) + } + + public List getAllUsers() { + List userList = new ArrayList<>(); + String selectQuery = "SELECT * FROM " + TABLE_USERS; + + SQLiteDatabase db = this.getWritableDatabase(); + Cursor cursor = db.rawQuery(selectQuery, null); + + // 用于记录已经显示的用户名和密码 + HashSet displayedUserData = new HashSet<>(); + + // 遍历游标,并将数据添加到用户列表中 + if (cursor.moveToFirst()) { + do { + // 获取当前游标位置的用户名和密码 + String username = cursor.getString(cursor.getColumnIndex(COLUMN_USERNAME)); + String password = cursor.getString(cursor.getColumnIndex(COLUMN_PASSWORD)); + + // 生成用户数据字符串,用于检查是否重复 + String userDataString = username + "_" + password; + + // 如果该用户数据未在之前显示过,则将用户添加到列表中 + if (!displayedUserData.contains(userDataString)) { + User user = new User(); + user.setId(cursor.getInt(cursor.getColumnIndex(COLUMN_ID))); + user.setUsername(username); + user.setPassword(password); + userList.add(user); + + // 将当前用户数据标记为已显示 + displayedUserData.add(userDataString); + } + } while (cursor.moveToNext()); + } + + // 关闭游标和数据库连接 + cursor.close(); + db.close(); + + return userList; + } + +} diff --git a/App12/app/src/main/java/com/example/app1/IndexActivity.java b/App12/app/src/main/java/com/example/app1/IndexActivity.java new file mode 100644 index 0000000..98ee048 --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/IndexActivity.java @@ -0,0 +1,82 @@ +package com.example.app1; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; + +public class IndexActivity extends AppCompatActivity implements View.OnClickListener { + private LinearLayout musicLine, findLine, liveLine, personLine; + private TextView lastSelectedText; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.index_daohan); + init(); + switchFragment(new musicFragment()); + setDefaultTextColor(findViewById(R.id.wenzi1)); // 设置默认选中项的文字颜色 + lastSelectedText = findViewById(R.id.wenzi1); + } + + // 初始化布局 + private void init() { + musicLine = findViewById(R.id.gaohan1); + musicLine.setOnClickListener(this); + findLine = findViewById(R.id.gaohan2); + findLine.setOnClickListener(this); + liveLine = findViewById(R.id.gaohan3); + liveLine.setOnClickListener(this); + personLine = findViewById(R.id.gaohan4); + personLine.setOnClickListener(this); + } + + // 设置默认选中项的文字颜色 + private void setDefaultTextColor(TextView text) { + text.setTextColor(Color.parseColor("#FF4081")); + } + + // 设置默认项的文字颜色为默认颜色 + private void resetTextColor(TextView text) { + text.setTextColor(Color.parseColor("#000000")); + } + + // 处理点击事件 + @Override + public void onClick(View view) { + resetTextColor(lastSelectedText); // 恢复上一个选中项的文字颜色为默认颜色 + if (view.getId() == R.id.gaohan1) { + switchFragment(new musicFragment()); + lastSelectedText = findViewById(R.id.wenzi1); + setDefaultTextColor(lastSelectedText); + } else if (view.getId() == R.id.gaohan2) { + switchFragment(new findFragment()); + lastSelectedText = findViewById(R.id.wenzi2); + setDefaultTextColor(lastSelectedText); + } else if (view.getId() == R.id.gaohan3) { + switchFragment(new liveFragment()); + lastSelectedText = findViewById(R.id.wenzi3); + setDefaultTextColor(lastSelectedText); + } else if (view.getId() == R.id.gaohan4) { + switchFragment(new personFragment()); + lastSelectedText = findViewById(R.id.wenzi4); + setDefaultTextColor(lastSelectedText); + } + } + + // 切换Fragment + private void switchFragment(Fragment fragment) { + getSupportFragmentManager().beginTransaction().replace(R.id.gaohan, fragment).commit(); + } + + // 退出登录 + public void tuichudenglu(View view) { + Intent intent = new Intent(IndexActivity.this, MainActivity.class); + startActivity(intent); + } +} diff --git a/App12/app/src/main/java/com/example/app1/MainActivity.java b/App12/app/src/main/java/com/example/app1/MainActivity.java new file mode 100644 index 0000000..38ba6cc --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/MainActivity.java @@ -0,0 +1,38 @@ +package com.example.app1; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + //获取按钮 + Button button = (Button) findViewById(R.id.button); + + //按钮进行监听 + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //监听按钮,如果点击,就跳转 + Intent intent = new Intent(); + //前一个(MainActivity.this)是目前页面,后面一个是要跳转的下一个页面 + + intent.setClass(MainActivity.this,MainActivity2.class); + startActivity(intent); + } + }); + + } +} diff --git a/App12/app/src/main/java/com/example/app1/MainActivity2.java b/App12/app/src/main/java/com/example/app1/MainActivity2.java new file mode 100644 index 0000000..844a332 --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/MainActivity2.java @@ -0,0 +1,150 @@ +package com.example.app1; + +import android.annotation.SuppressLint; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Build; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import java.util.List; + + +public class MainActivity2 extends AppCompatActivity { + + private EditText username; + private EditText password; + private Button login,lookButton; + private Button startServiceButton; + private boolean isServiceRunning = false; + private DBHelper dbHelper; // 数据库助手类 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.user_login); + //初始化视图 + username = findViewById(R.id.username); + password = findViewById(R.id.password); + login = findViewById(R.id.login); + startServiceButton = findViewById(R.id.btnStartService);// 开始时间推送服务按钮 + lookButton = findViewById(R.id.look); // 查看用户数据按钮 + // 创建通知渠道 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel channel = new NotificationChannel("channel_id", "Channel Name", NotificationManager.IMPORTANCE_DEFAULT); + NotificationManager notificationManager = getSystemService(NotificationManager.class); + notificationManager.createNotificationChannel(channel); + } + + // 初始化数据库助手类 + dbHelper = new DBHelper(MainActivity2.this); + + // 启动服务按钮点击事件 + startServiceButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!isServiceRunning) { + startMyService(); + isServiceRunning = true; + } + } + }); + + // 登录按钮点击事件 + login.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String strUsername = username.getText().toString().trim(); + String strPassword = password.getText().toString().trim(); + + // 获取所有用户数据 + List userList = dbHelper.getAllUsers(); + + // 检查是否有用户数据 + if (!userList.isEmpty()) { + // 遍历用户数据列表 + for (User user : userList) { + String savedUsername = user.getUsername(); + String savedPassword = user.getPassword(); + + // 检查用户名和密码是否匹配 + if (strUsername.equals(savedUsername) && strPassword.equals(savedPassword)) { + Toast.makeText(MainActivity2.this, "恭喜,登录成功!", Toast.LENGTH_SHORT).show(); + Intent intent1 = new Intent(MainActivity2.this, IndexActivity.class); + startActivity(intent1); + return; // 如果匹配成功,则直接返回,不再继续循环 + } + } + // 如果循环结束仍未匹配成功,则提示用户名或密码错误 + Toast.makeText(MainActivity2.this, "用户名或密码错误!", Toast.LENGTH_SHORT).show(); + } else { + // 如果用户数据列表为空,则提示用户名或密码错误 + Toast.makeText(MainActivity2.this, "用户名或密码错误!", Toast.LENGTH_SHORT).show(); + } + } + }); + + // 查看用户数据按钮点击事件 + lookButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // 获取所有用户数据 + List userList = dbHelper.getAllUsers(); + + // 创建对话框来显示用户数据 + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity2.this); + builder.setTitle("用户数据"); + + // 构建用户数据字符串 + StringBuilder userData = new StringBuilder(); + for (User user : userList) { + userData.append("ID: ").append(user.getId()).append(", ") + .append("用户名: ").append(user.getUsername()).append(", ") + .append("密码: ").append(user.getPassword()).append("\n"); + } + + // 将用户数据设置到对话框中 + builder.setMessage(userData.toString()); + + // 设置对话框的按钮 + builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + // 点击确定按钮的逻辑 + dialog.dismiss(); // 关闭对话框 + } + }); + + // 创建并显示对话框 + AlertDialog dialog = builder.create(); + dialog.show(); + } + }); + } + + //开始时间推送服务 + private void startMyService() { + Intent serviceIntent = new Intent(this, MyService.class); + startService(serviceIntent); + } + + //点击注册按钮时,跳转到注册界面 + public void zhuce(View view) { + Intent intent2 = new Intent(MainActivity2.this, MainActivity3.class); + startActivity(intent2); + } +} + diff --git a/App12/app/src/main/java/com/example/app1/MainActivity3.java b/App12/app/src/main/java/com/example/app1/MainActivity3.java new file mode 100644 index 0000000..75907d0 --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/MainActivity3.java @@ -0,0 +1,109 @@ +package com.example.app1; + +import android.content.ContentValues; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.view.View; +import android.widget.CheckBox; +import android.widget.RadioGroup; +import android.widget.TextView; +import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + +public class MainActivity3 extends AppCompatActivity implements View.OnClickListener { + private TextView reg_username; + private TextView reg_password; + private TextView reg_sure_password; + private RadioGroup radiogroup; + private CheckBox ah1, ah2, ah3, ah4; + private String sex = "男"; + private String aihao1 = "", aihao2 = "", aihao3 = "", aihao4 = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.user_register); + //初始化 + reg_username = findViewById(R.id.reg_username); + reg_password = findViewById(R.id.reg_password); + reg_sure_password = findViewById(R.id.reg_sure_password); + + findViewById(R.id.reg_register).setOnClickListener(this); + radiogroup = findViewById(R.id.rp); + radiogroup.setOnCheckedChangeListener((group, checkedId) -> { + if (checkedId == R.id.man) { + sex = "男"; + } else if (checkedId == R.id.woman) { + sex = "女"; + } + }); + + ah1 = findViewById(R.id.chang); + ah2 = findViewById(R.id.tiao); + ah3 = findViewById(R.id.rap); + ah4 = findViewById(R.id.basketball); + ah1.setOnCheckedChangeListener((buttonView, isChecked) -> { + aihao1 = isChecked ? "唱" : ""; + }); + ah2.setOnCheckedChangeListener((buttonView, isChecked) -> { + aihao2 = isChecked ? "跳" : ""; + }); + ah3.setOnCheckedChangeListener((buttonView, isChecked) -> { + aihao3 = isChecked ? "rap" : ""; + }); + ah4.setOnCheckedChangeListener((buttonView, isChecked) -> { + aihao4 = isChecked ? "篮球" : ""; + }); + } + + @Override + public void onClick(View view) { + String username = reg_username.getText().toString().trim(); + String password = reg_password.getText().toString().trim(); + String surepassword = reg_sure_password.getText().toString().trim(); + + if (username.isEmpty() || password.isEmpty() || surepassword.isEmpty()) { + Toast.makeText(MainActivity3.this, "用户名或密码不能为空!", Toast.LENGTH_SHORT).show(); + return; + } + + if (!password.equals(surepassword)) { + Toast.makeText(MainActivity3.this, "两次输入密码不一致!", Toast.LENGTH_SHORT).show(); + return; + } + + // 保存用户名和密码到数据库 + DBHelper dbHelper = new DBHelper(MainActivity3.this); + SQLiteDatabase db = null; + try { + db = dbHelper.getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put("username", username); + values.put("password", password); + long result = db.insert("users", null, values); + if (result == -1) { + Toast.makeText(MainActivity3.this, "注册失败!", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(MainActivity3.this, "注册成功!", Toast.LENGTH_SHORT).show(); + // 如果一切正常,跳转到下一个页面 + Intent intent1 = new Intent(this, MainActivity2.class); + startActivity(intent1); + } + } catch (Exception e) { + e.printStackTrace(); + Toast.makeText(MainActivity3.this, "注册失败!", Toast.LENGTH_SHORT).show(); + } finally { + if (db != null) { + db.close(); // 关闭数据库连接 + } + } + + } + + // 返回按钮点击事件 + public void fanhui(View view) { + Intent intent5 = new Intent(MainActivity3.this, MainActivity2.class); + startActivity(intent5); + } +} diff --git a/App12/app/src/main/java/com/example/app1/MyService.java b/App12/app/src/main/java/com/example/app1/MyService.java new file mode 100644 index 0000000..52b2526 --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/MyService.java @@ -0,0 +1,85 @@ +package com.example.app1; + +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.Binder; +import android.os.Handler; +import android.os.IBinder; + +import androidx.core.app.NotificationCompat; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +public class MyService extends Service { + private static final int NOTIFICATION_ID = 1; + private final IBinder binder = new LocalBinder(); + private Handler handler; + private Runnable runnable; + + public MyService() { + } + + @Override + public IBinder onBind(Intent intent) { + return binder; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + startForeground(NOTIFICATION_ID, createNotification()); + handler = new Handler(); + runnable = new Runnable() { + @Override + public void run() { + showNotification(); + handler.postDelayed(this, 60 * 1000); // 每隔一分钟发送通知 + } + }; + handler.post(runnable); + return START_STICKY; + } + + @Override + public void onDestroy() { + super.onDestroy(); + handler.removeCallbacks(runnable); + } + + private void showNotification() { + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + Notification notification = createNotification(); + notificationManager.notify(NOTIFICATION_ID, notification); + } + + private Notification createNotification() { + // 获取当前时间 + SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); + Date date = new Date(System.currentTimeMillis()); + + // 创建通知点击时要启动的意图 + Intent notificationIntent = new Intent(this, MainActivity2.class); + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); + + // 创建通知 + NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id") + .setContentTitle("提醒系统当前时间") + .setContentText("系统当前时间为:" + formatter.format(date)) // 在通知文本中显示当前时间 + .setSmallIcon(R.drawable.ic_launcher_background) + .setContentIntent(pendingIntent) + .setPriority(NotificationCompat.PRIORITY_DEFAULT); + + return builder.build(); + } + + public class LocalBinder extends Binder { + MyService getService() { + return MyService.this; + } + } +} diff --git a/App12/app/src/main/java/com/example/app1/PlayMusicActivity.java b/App12/app/src/main/java/com/example/app1/PlayMusicActivity.java new file mode 100644 index 0000000..365816c --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/PlayMusicActivity.java @@ -0,0 +1,94 @@ +package com.example.app1; + +import android.media.MediaPlayer; +import android.os.Bundle; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.LinearInterpolator; +import android.widget.Button; +import android.widget.ImageView; + +import androidx.appcompat.app.AppCompatActivity; + +public class PlayMusicActivity extends AppCompatActivity{ + + private MediaPlayer mediaPlayer; + private Button playButton, pauseButton, stopButton; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_play_music); + + // 初始化旋转的图片并设置动画 + ImageView iv = findViewById(R.id.rotating_image); + Animation animation = AnimationUtils.loadAnimation(this, R.anim.img_animation); + LinearInterpolator linearInterpolator = new LinearInterpolator(); + animation.setInterpolator(linearInterpolator); + iv.startAnimation(animation); + + // 创建MediaPlayer并设置音乐资源,启用循环播放,并开始播放音乐 + mediaPlayer = MediaPlayer.create(this, R.raw.music1); + mediaPlayer.setLooping(true); + mediaPlayer.start(); + + // 初始化按钮并设置点击监听器 + playButton = findViewById(R.id.play_button); + pauseButton = findViewById(R.id.pause_button); + stopButton = findViewById(R.id.stop_button); + + playButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + playMusic(); + } + }); + pauseButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + pauseMusic(); + } + }); + stopButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + stopMusic(); + } + }); + } + + // 播放音乐 + private void playMusic() { + if (!mediaPlayer.isPlaying()) { + mediaPlayer.start(); + } + } + + // 暂停音乐 + private void pauseMusic() { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + } + } + + // 停止音乐 + private void stopMusic() { + mediaPlayer.pause(); + mediaPlayer.seekTo(0); // 将音乐回到开头 + } + + // 销毁资源 + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer != null) { + mediaPlayer.release(); + mediaPlayer = null; + } + + // 清除动画 + ImageView iv = findViewById(R.id.rotating_image); + iv.clearAnimation(); + } +} diff --git a/App12/app/src/main/java/com/example/app1/User.java b/App12/app/src/main/java/com/example/app1/User.java new file mode 100644 index 0000000..db594e6 --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/User.java @@ -0,0 +1,45 @@ +package com.example.app1; + +// 用户类 +public class User { + private int id; // 用户ID + private String username; // 用户名 + private String password; // 密码 + + // 默认构造函数 + public User() { + + } + + // 带参数的构造函数 + public User(int id, String username, String password) { + this.id = id; + this.username = username; + this.password = password; + } + + // Getter 和 Setter 方法 + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/App12/app/src/main/java/com/example/app1/findFragment.java b/App12/app/src/main/java/com/example/app1/findFragment.java new file mode 100644 index 0000000..91df303 --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/findFragment.java @@ -0,0 +1,122 @@ +package com.example.app1; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +public class findFragment extends Fragment { + private ListView listView; + private TextView contentText; + private LinearLayout ll2; + + private ListView playlistView; + private int lastClickedPosition = -1; // 记录上次点击的位置 + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ + View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_find, container, false); + init(view); + + // 默认显示热搜榜内容 + String[] defaultPlaylist = getPlaylistForItem(0); + ArrayAdapter defaultPlaylistAdapter = new ArrayAdapter<>(requireContext(), + android.R.layout.simple_list_item_1, defaultPlaylist); + playlistView.setAdapter(defaultPlaylistAdapter); + return view; + } + + private void init(View view) { + // 初始化列表和内容显示区域 + listView = view.findViewById(R.id.list_view); + contentText = view.findViewById(R.id.content_text); + playlistView = view.findViewById(R.id.playlist_view); + + ll2 = view.findViewById(R.id.ll2); + + ll2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getContext(), PlayMusicActivity.class); // 创建启动本地音乐播放页面的Intent + startActivity(intent); // 启动新的Activity + } + }); + + + // 列表项 + final String[] listItems = {"热搜榜", "儿童热门榜", "影视热搜", "国风热搜", "外语热搜", "情歌热搜", "纯音乐热搜", "综艺热搜"}; + + ArrayAdapter adapter = new ArrayAdapter<>(requireContext(), + android.R.layout.simple_list_item_1, listItems); + listView.setAdapter(adapter); + + // 默认显示热搜榜项的背景颜色为粉色 + listView.post(new Runnable() { + @Override + public void run() { + View hotSearchView = listView.getChildAt(0); + hotSearchView.setBackgroundColor(Color.parseColor("#FBBCDC")); // 粉色 + } + }); + + // 记录上次点击的位置 + lastClickedPosition = 0; + + // 点击列表项更新内容显示区域的内容和右侧的歌单内容 + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + // 恢复上一个点击项的背景颜色 + if (lastClickedPosition != -1) { + View lastClickedView = parent.getChildAt(lastClickedPosition); + lastClickedView.setBackgroundColor(Color.TRANSPARENT); // 恢复默认背景色 + } + + // 获取点击的视图 + View clickedView = parent.getChildAt(position); + // 修改背景颜色为粉色 + clickedView.setBackgroundColor(Color.parseColor("#FBBCDC")); // 粉色 + // 更新上次点击的位置 + lastClickedPosition = position; + + // 更新右侧歌单内容 + String[] playlist = getPlaylistForItem(position); + ArrayAdapter playlistAdapter = new ArrayAdapter<>(requireContext(), + android.R.layout.simple_list_item_1, playlist); + playlistView.setAdapter(playlistAdapter); + } + }); + } + + // 根据位置返回相应的歌单内容 + private String[] getPlaylistForItem(int position) { + switch (position) { + case 0: + return new String[]{"无名的人", "落", "如果可以","若月亮没有来","梨花香","下辈子早点相遇","如果爱忘了","离别开出花","dadada","别爱太满别睡太晚","我把故事酿成酒","梦驼铃","安河桥","你"}; + case 1: + return new String[]{"贝乐虎儿歌", "宝宝巴士", "睡前故事晚安宝贝","寓言故事","黑猫警长救援队","兔小贝睡前故事","宝宝巴士儿歌","迷你特工队","咕力律动儿歌","冰雪奇缘","海绵宝宝","海底小纵队儿歌","一千零一夜睡前故事","熊出没"}; + case 2: + return new String[]{"与凤行", "花间令", "热辣滚烫","繁花","烈焰","追风者","别对我动心","谢谢你温暖我","南来北往","在暴雪时分","小日子","大理寺少卿游","祈今朝","周处除三害"}; + case 3: + return new String[]{"霜雪千年", "青花瓷", "红昭愿","上春山","卜卦","天下","桃花诺","画心","红尘客栈","年轮","牵丝戏","若梦","赤伶","武家坡"}; + case 4: + return new String[]{"fate", "magnetic", "call of silence","see you again","back seat","swag","love story","repeat","hey oh","sheesh","wake","any song","heaven","doar cu tine"}; + case 5: + return new String[]{"紫荆花盛开", "不如见一面", "悬溺","你冷落我我就放弃你","谁","犯错","你把爱情给了谁","负我不负她","霜雪千年","沉溺","打歌妹","浴室","爱情转移","把回忆拼好给你"}; + case 6: + return new String[]{"daydream", "碧苍战歌", "瞬间的永恒","daylight","windy hill","夜空的寂静","神明无止","误入迷失森林","秋的思念","诀别书","水墨兰亭","城南花已开","summer","引忘川"}; + case 7: + return new String[]{"就是爱你", "谈恋爱", "慢冷","流沙","暖暖","小宇","桃花运","挚友","问","一眼","怎样","想你时风起","我的美丽","分飞"}; + default: + return new String[]{}; + } + } +} diff --git a/App12/app/src/main/java/com/example/app1/liveFragment.java b/App12/app/src/main/java/com/example/app1/liveFragment.java new file mode 100644 index 0000000..9ed3934 --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/liveFragment.java @@ -0,0 +1,34 @@ +package com.example.app1; + +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import java.util.ArrayList; +import java.util.List; + +public class liveFragment extends Fragment { + private RecyclerView horizontalRecyclerView; + private LinearLayout ll3; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_live, container, false); + + ll3 = view.findViewById(R.id.ll3); + ll3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getContext(), PlayMusicActivity.class); // 创建启动本地音乐播放页面的Intent + startActivity(intent); // 启动新的Activity + } + }); + return view; + } +} diff --git a/App12/app/src/main/java/com/example/app1/musicFragment.java b/App12/app/src/main/java/com/example/app1/musicFragment.java new file mode 100644 index 0000000..f39743c --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/musicFragment.java @@ -0,0 +1,148 @@ +package com.example.app1; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.LinearLayout; + +import androidx.fragment.app.Fragment; + +import java.io.IOException; + +public class musicFragment extends Fragment { + private ImageButton playButton1, playButton2, playButton3; // 播放按钮 + private Button button4, button5, button6; // 页面跳转按钮 + private LinearLayout ll1; + private MediaPlayer mediaPlayer; // 媒体播放器 + private String musicUrl1 = "https://t3.kugou.com/song.html?id=bmzyP1dCNV2"; // 第一首音乐链接 + private String musicUrl2 = "https://t4.kugou.com/song.html?id=bn05n53CNV2"; // 第二首音乐链接 + private String musicUrl4 = "https://www.kugou.com/yy/special/index/1-5-0.html"; // 音乐排行榜链接 + private String musicUrl5 = "https://www.kugou.com/yy/html/rank.html"; // 音乐排行榜链接 + private String musicUrl6 = "https://www.kugou.com/yy/html/singer.html"; // 歌手页面链接 + + // 创建视图并返回 + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_music, container, false); + init(view); // 初始化界面 + return view; + } + + // 初始化界面 + private void init(View view) { + playButton1 = view.findViewById(R.id.ib1); + playButton2 = view.findViewById(R.id.ib2); + playButton3 = view.findViewById(R.id.ib3); + + button5 = view.findViewById(R.id.phb); + button4 = view.findViewById(R.id.tjgd); + button6 = view.findViewById(R.id.rmgs); + + ll1 = view.findViewById(R.id.ll1); + + mediaPlayer = new MediaPlayer(); // 初始化媒体播放器 + + // 点击第一个播放按钮,播放第一首音乐 + playButton1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + playMusic(musicUrl1); + } + }); + + // 点击第二个播放按钮,播放第二首音乐 + playButton2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + playMusic(musicUrl2); + } + }); + + // 点击本地播放按钮,跳转到本地音乐播放页面 + playButton3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + playLocalMusic(); + } + }); + + ll1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getContext(), PlayMusicActivity.class); // 创建启动本地音乐播放页面的Intent + startActivity(intent); // 启动新的Activity + } + }); + + // 点击排行榜按钮,打开音乐排行榜页面 + button5.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openRankingPage1(); + } + }); + + // 点击推荐歌单按钮,打开推荐歌单页面 + button4.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openRankingPage2(); + } + }); + + // 点击热门歌手按钮,打开热门歌手页面 + button6.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openRankingPage3(); + } + }); + + } + + // 播放在线音乐 + private void playMusic(String musicUrl) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(musicUrl)); // 创建打开链接的Intent + startActivity(intent); // 启动Intent,打开对应链接 + } + + // 播放本地音乐 + private void playLocalMusic() { + Intent intent = new Intent(getContext(), PlayMusicActivity.class); // 创建启动本地音乐播放页面的Intent + startActivity(intent); // 启动新的Activity + } + + // 打开音乐排行榜页面 + private void openRankingPage1() { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(musicUrl5)); // 创建打开音乐排行榜链接的Intent + startActivity(intent); // 启动Intent,打开对应链接 + } + + // 打开推荐歌单页面 + private void openRankingPage2() { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(musicUrl4)); // 创建打开推荐歌单链接的Intent + startActivity(intent); // 启动Intent,打开对应链接 + } + + // 打开热门歌手页面 + private void openRankingPage3() { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(musicUrl6)); // 创建打开热门歌手链接的Intent + startActivity(intent); // 启动Intent,打开对应链接 + } + + // 销毁Fragment时释放媒体播放器资源 + @Override + public void onDestroy() { + super.onDestroy(); + if (mediaPlayer != null) { + mediaPlayer.release(); // 释放媒体播放器资源 + mediaPlayer = null; + } + } +} diff --git a/App12/app/src/main/java/com/example/app1/personFragment.java b/App12/app/src/main/java/com/example/app1/personFragment.java new file mode 100644 index 0000000..3149f00 --- /dev/null +++ b/App12/app/src/main/java/com/example/app1/personFragment.java @@ -0,0 +1,155 @@ +package com.example.app1; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.SimpleAdapter; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.List; + +public class personFragment extends Fragment { + private ListView listNew; + private TextView clockTextView; + private LinearLayout ll4; + private final Handler handler = new Handler(Looper.getMainLooper()); + + private List> lists; + private SimpleAdapter adapter; + private int[][] iv={{R.drawable.gequ1,R.drawable.gequ2,R.drawable.gequ3,R.drawable.gequ4,R.drawable.gequ5}, + {R.drawable.zhibo1,R.drawable.zhibo2,R.drawable.zhibo3,R.drawable.zhibo4,R.drawable.zhibo5}, + {R.drawable.zhibo6,R.drawable.zhibo7,R.drawable.zhibo8,R.drawable.gequ1,R.drawable.gequ2}, + {R.drawable.gequ4,R.drawable.zhibo8,R.drawable.zhibo3,R.drawable.gequ5,R.drawable.zhibo2}}; + private String[][] zuopin={{"若月亮没来","Whataya Want from Me","诺言(经典版)","How Sweet","最后一页"}, + {"Bubble Gum","Hero(Explicit)","金风玉露","同途知己","人生如戏"}, + {"火力全开","俺不想上班","连理枝","缺氧","听说你"}, + {"Outlaws of Love","小雨","氧化氢","行走的鱼","致爱人"}}; + private String[][]zuozhe={{"王宇宙Leto","Adam Lambert","NewJeans","en","NewJeans"}, + {"Charlie Puth","杨宗纬","张碧晨","说理哥","郭有才"}, + {"王力宏","Ciyo","花町馆长","野哥","彭宇昕"}, + {"Adam Lambert","万妮达Vinida Weng","白一莎","宝石Gem","SING-宗思雨"}}; + Button button1,button2,button3,button4; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // 使用布局文件fragment_person创建视图 + View view = inflater.inflate(R.layout.fragment_person, container, false); + init(view); // 初始化视图 + // 绑定 TextView + clockTextView = view.findViewById(R.id.clockTextView); + // 启动时钟更新线程 + updateClock(); + return view; + } + + // 更新时钟的方法 + private void updateClock() { + Thread thread = new Thread() { + @Override + public void run() { + try { + while (!isInterrupted()) { + long currentTimeMillis = System.currentTimeMillis(); + SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); + String currentTime = timeFormat.format(new Date(currentTimeMillis)); + // 通过 handler 更新 UI 线程中的时钟文本 + handler.post(() -> clockTextView.setText(currentTime)); + Thread.sleep(1000); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }; + thread.start(); + } + + // 初始化视图的方法 + private void init(View view) { + listNew = view.findViewById(R.id.list_new); + button1 = view.findViewById(R.id.bu1); + button2 = view.findViewById(R.id.bu2); + button3 = view.findViewById(R.id.bu3); + button4 = view.findViewById(R.id.bu4); + + ll4 = view.findViewById(R.id.ll4); + ll4.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getContext(), PlayMusicActivity.class); // 创建启动本地音乐播放页面的Intent + startActivity(intent); // 启动新的Activity + } + }); + + // 设置按钮的点击监听器 + button1.setOnClickListener(v -> updateListView(getDataFromView(v))); + button2.setOnClickListener(v -> updateListView(getDataFromView(v))); + button3.setOnClickListener(v -> updateListView(getDataFromView(v))); + button4.setOnClickListener(v -> updateListView(getDataFromView(v))); + + updateListView(0); // 初始化列表视图显示 + } + + // 从视图中获取数据的方法 + public int getDataFromView(View view) { + if (view.getId() == R.id.bu1) { + return onClick(view); + } else if (view.getId() == R.id.bu2) { + return onClick(view); + } else if (view.getId() == R.id.bu3) { + return onClick(view); + } else if (view.getId() == R.id.bu4) { + return onClick(view); + } + return 0; + } + + // 更新列表视图的方法 + public void updateListView(int data) { + lists = new ArrayList<>(); + for (int i = 0; i < zuopin[data].length; i++) { + Map map = new HashMap<>(); + map.put("iv", iv[data][i]); + map.put("zuopin", zuopin[data][i]); + map.put("zuozhe", zuozhe[data][i]); + lists.add(map); + } + adapter = new SimpleAdapter(requireContext(), lists, R.layout.item_person, + new String[]{"iv", "zuopin", "zuozhe"}, + new int[]{R.id.iv, R.id.zuopin, R.id.zuozhe}); + listNew.setAdapter(adapter); + } + + // 处理按钮点击事件的方法 + @SuppressLint("ResourceAsColor") + public int onClick(View view) { + if (view.getId() == R.id.bu1) { + return 0; + } else if (view.getId() == R.id.bu2) { + return 1; + } else if (view.getId() == R.id.bu3) { + return 2; + } else if (view.getId() == R.id.bu4) { + return 3; + } + return 0; // 默认返回0 + } + +} \ No newline at end of file diff --git a/App12/app/src/main/res/anim/img_animation.xml b/App12/app/src/main/res/anim/img_animation.xml new file mode 100644 index 0000000..fe97f39 --- /dev/null +++ b/App12/app/src/main/res/anim/img_animation.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/App12/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/App12/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable-v24/tubiao_foreground.xml b/App12/app/src/main/res/drawable-v24/tubiao_foreground.xml new file mode 100644 index 0000000..da1dcd9 --- /dev/null +++ b/App12/app/src/main/res/drawable-v24/tubiao_foreground.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable/arrow_down.xml b/App12/app/src/main/res/drawable/arrow_down.xml new file mode 100644 index 0000000..a8b409b --- /dev/null +++ b/App12/app/src/main/res/drawable/arrow_down.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable/background.jpg b/App12/app/src/main/res/drawable/background.jpg new file mode 100644 index 0000000..447560b Binary files /dev/null and b/App12/app/src/main/res/drawable/background.jpg differ diff --git a/App12/app/src/main/res/drawable/background2.jpg b/App12/app/src/main/res/drawable/background2.jpg new file mode 100644 index 0000000..357b543 Binary files /dev/null and b/App12/app/src/main/res/drawable/background2.jpg differ diff --git a/App12/app/src/main/res/drawable/background3.jpg b/App12/app/src/main/res/drawable/background3.jpg new file mode 100644 index 0000000..13786d2 Binary files /dev/null and b/App12/app/src/main/res/drawable/background3.jpg differ diff --git a/App12/app/src/main/res/drawable/backgroundnew.jpg b/App12/app/src/main/res/drawable/backgroundnew.jpg new file mode 100644 index 0000000..ab2c79e Binary files /dev/null and b/App12/app/src/main/res/drawable/backgroundnew.jpg differ diff --git a/App12/app/src/main/res/drawable/baseline_add_location_alt_24.xml b/App12/app/src/main/res/drawable/baseline_add_location_alt_24.xml new file mode 100644 index 0000000..5240626 --- /dev/null +++ b/App12/app/src/main/res/drawable/baseline_add_location_alt_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/App12/app/src/main/res/drawable/baseline_face_24.xml b/App12/app/src/main/res/drawable/baseline_face_24.xml new file mode 100644 index 0000000..665f371 --- /dev/null +++ b/App12/app/src/main/res/drawable/baseline_face_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/App12/app/src/main/res/drawable/baseline_lock_24.xml b/App12/app/src/main/res/drawable/baseline_lock_24.xml new file mode 100644 index 0000000..1813549 --- /dev/null +++ b/App12/app/src/main/res/drawable/baseline_lock_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/App12/app/src/main/res/drawable/baseline_music_note_24.xml b/App12/app/src/main/res/drawable/baseline_music_note_24.xml new file mode 100644 index 0000000..96942ff --- /dev/null +++ b/App12/app/src/main/res/drawable/baseline_music_note_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/App12/app/src/main/res/drawable/baseline_vpn_key_24.xml b/App12/app/src/main/res/drawable/baseline_vpn_key_24.xml new file mode 100644 index 0000000..c6d1b76 --- /dev/null +++ b/App12/app/src/main/res/drawable/baseline_vpn_key_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/App12/app/src/main/res/drawable/bofang.jpg b/App12/app/src/main/res/drawable/bofang.jpg new file mode 100644 index 0000000..c60ec3a Binary files /dev/null and b/App12/app/src/main/res/drawable/bofang.jpg differ diff --git a/App12/app/src/main/res/drawable/bofanganniu.gif b/App12/app/src/main/res/drawable/bofanganniu.gif new file mode 100644 index 0000000..0018ea0 Binary files /dev/null and b/App12/app/src/main/res/drawable/bofanganniu.gif differ diff --git a/App12/app/src/main/res/drawable/button.xml b/App12/app/src/main/res/drawable/button.xml new file mode 100644 index 0000000..a8b409b --- /dev/null +++ b/App12/app/src/main/res/drawable/button.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable/button_login.xml b/App12/app/src/main/res/drawable/button_login.xml new file mode 100644 index 0000000..d5d20ce --- /dev/null +++ b/App12/app/src/main/res/drawable/button_login.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable/button_regist.xml b/App12/app/src/main/res/drawable/button_regist.xml new file mode 100644 index 0000000..c69c325 --- /dev/null +++ b/App12/app/src/main/res/drawable/button_regist.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable/dabackground.webp b/App12/app/src/main/res/drawable/dabackground.webp new file mode 100644 index 0000000..ea738d7 Binary files /dev/null and b/App12/app/src/main/res/drawable/dabackground.webp differ diff --git a/App12/app/src/main/res/drawable/diantai.png b/App12/app/src/main/res/drawable/diantai.png new file mode 100644 index 0000000..b9da5f9 Binary files /dev/null and b/App12/app/src/main/res/drawable/diantai.png differ diff --git a/App12/app/src/main/res/drawable/fengmianbackground.jpeg b/App12/app/src/main/res/drawable/fengmianbackground.jpeg new file mode 100644 index 0000000..2fe7d26 Binary files /dev/null and b/App12/app/src/main/res/drawable/fengmianbackground.jpeg differ diff --git a/App12/app/src/main/res/drawable/find.png b/App12/app/src/main/res/drawable/find.png new file mode 100644 index 0000000..aa09bab Binary files /dev/null and b/App12/app/src/main/res/drawable/find.png differ diff --git a/App12/app/src/main/res/drawable/gequ1.jpg b/App12/app/src/main/res/drawable/gequ1.jpg new file mode 100644 index 0000000..f351f58 Binary files /dev/null and b/App12/app/src/main/res/drawable/gequ1.jpg differ diff --git a/App12/app/src/main/res/drawable/gequ2.jpg b/App12/app/src/main/res/drawable/gequ2.jpg new file mode 100644 index 0000000..2c3dad1 Binary files /dev/null and b/App12/app/src/main/res/drawable/gequ2.jpg differ diff --git a/App12/app/src/main/res/drawable/gequ3.jpg b/App12/app/src/main/res/drawable/gequ3.jpg new file mode 100644 index 0000000..67b231b Binary files /dev/null and b/App12/app/src/main/res/drawable/gequ3.jpg differ diff --git a/App12/app/src/main/res/drawable/gequ4.jpg b/App12/app/src/main/res/drawable/gequ4.jpg new file mode 100644 index 0000000..4a35d8d Binary files /dev/null and b/App12/app/src/main/res/drawable/gequ4.jpg differ diff --git a/App12/app/src/main/res/drawable/gequ5.jpg b/App12/app/src/main/res/drawable/gequ5.jpg new file mode 100644 index 0000000..62503bd Binary files /dev/null and b/App12/app/src/main/res/drawable/gequ5.jpg differ diff --git a/App12/app/src/main/res/drawable/ic_launcher_background.xml b/App12/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/App12/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/App12/app/src/main/res/drawable/img.png b/App12/app/src/main/res/drawable/img.png new file mode 100644 index 0000000..34fee5f Binary files /dev/null and b/App12/app/src/main/res/drawable/img.png differ diff --git a/App12/app/src/main/res/drawable/item_background.xml b/App12/app/src/main/res/drawable/item_background.xml new file mode 100644 index 0000000..47f0c89 --- /dev/null +++ b/App12/app/src/main/res/drawable/item_background.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable/liebiao.jpg b/App12/app/src/main/res/drawable/liebiao.jpg new file mode 100644 index 0000000..bb52d4b Binary files /dev/null and b/App12/app/src/main/res/drawable/liebiao.jpg differ diff --git a/App12/app/src/main/res/drawable/liebiao1.png b/App12/app/src/main/res/drawable/liebiao1.png new file mode 100644 index 0000000..01a7459 Binary files /dev/null and b/App12/app/src/main/res/drawable/liebiao1.png differ diff --git a/App12/app/src/main/res/drawable/liebiao2.png b/App12/app/src/main/res/drawable/liebiao2.png new file mode 100644 index 0000000..0c5d41c Binary files /dev/null and b/App12/app/src/main/res/drawable/liebiao2.png differ diff --git a/App12/app/src/main/res/drawable/live.png b/App12/app/src/main/res/drawable/live.png new file mode 100644 index 0000000..c22a754 Binary files /dev/null and b/App12/app/src/main/res/drawable/live.png differ diff --git a/App12/app/src/main/res/drawable/music.png b/App12/app/src/main/res/drawable/music.png new file mode 100644 index 0000000..6e02e8f Binary files /dev/null and b/App12/app/src/main/res/drawable/music.png differ diff --git a/App12/app/src/main/res/drawable/note.xml b/App12/app/src/main/res/drawable/note.xml new file mode 100644 index 0000000..1181693 --- /dev/null +++ b/App12/app/src/main/res/drawable/note.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable/person.png b/App12/app/src/main/res/drawable/person.png new file mode 100644 index 0000000..5e78818 Binary files /dev/null and b/App12/app/src/main/res/drawable/person.png differ diff --git a/App12/app/src/main/res/drawable/rounded_corner.xml b/App12/app/src/main/res/drawable/rounded_corner.xml new file mode 100644 index 0000000..346cb11 --- /dev/null +++ b/App12/app/src/main/res/drawable/rounded_corner.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/drawable/sousuo.jpg b/App12/app/src/main/res/drawable/sousuo.jpg new file mode 100644 index 0000000..aafd508 Binary files /dev/null and b/App12/app/src/main/res/drawable/sousuo.jpg differ diff --git a/App12/app/src/main/res/drawable/tuijian1.JPG b/App12/app/src/main/res/drawable/tuijian1.JPG new file mode 100644 index 0000000..d92107e Binary files /dev/null and b/App12/app/src/main/res/drawable/tuijian1.JPG differ diff --git a/App12/app/src/main/res/drawable/tuijian2.JPG b/App12/app/src/main/res/drawable/tuijian2.JPG new file mode 100644 index 0000000..c276e85 Binary files /dev/null and b/App12/app/src/main/res/drawable/tuijian2.JPG differ diff --git a/App12/app/src/main/res/drawable/tuijian3.jpg b/App12/app/src/main/res/drawable/tuijian3.jpg new file mode 100644 index 0000000..62433ea Binary files /dev/null and b/App12/app/src/main/res/drawable/tuijian3.jpg differ diff --git a/App12/app/src/main/res/drawable/tuijian4.png b/App12/app/src/main/res/drawable/tuijian4.png new file mode 100644 index 0000000..2685f58 Binary files /dev/null and b/App12/app/src/main/res/drawable/tuijian4.png differ diff --git a/App12/app/src/main/res/drawable/tupianbackground1.jpeg b/App12/app/src/main/res/drawable/tupianbackground1.jpeg new file mode 100644 index 0000000..b77a1f0 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground1.jpeg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground10.gif b/App12/app/src/main/res/drawable/tupianbackground10.gif new file mode 100644 index 0000000..a99a38e Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground10.gif differ diff --git a/App12/app/src/main/res/drawable/tupianbackground11.jpg b/App12/app/src/main/res/drawable/tupianbackground11.jpg new file mode 100644 index 0000000..0c04fe2 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground11.jpg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground12.jpeg b/App12/app/src/main/res/drawable/tupianbackground12.jpeg new file mode 100644 index 0000000..384ed67 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground12.jpeg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground13.jpg b/App12/app/src/main/res/drawable/tupianbackground13.jpg new file mode 100644 index 0000000..c8bec99 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground13.jpg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground14.jpeg b/App12/app/src/main/res/drawable/tupianbackground14.jpeg new file mode 100644 index 0000000..78b1cf9 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground14.jpeg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground15.jpeg b/App12/app/src/main/res/drawable/tupianbackground15.jpeg new file mode 100644 index 0000000..fd2e1ab Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground15.jpeg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground16.jpg b/App12/app/src/main/res/drawable/tupianbackground16.jpg new file mode 100644 index 0000000..e82b1a1 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground16.jpg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground17.jpeg b/App12/app/src/main/res/drawable/tupianbackground17.jpeg new file mode 100644 index 0000000..c5e65f6 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground17.jpeg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground2.jpeg b/App12/app/src/main/res/drawable/tupianbackground2.jpeg new file mode 100644 index 0000000..85964e0 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground2.jpeg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground3.jpg b/App12/app/src/main/res/drawable/tupianbackground3.jpg new file mode 100644 index 0000000..2db8083 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground3.jpg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground4.jpg b/App12/app/src/main/res/drawable/tupianbackground4.jpg new file mode 100644 index 0000000..d4c13d8 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground4.jpg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground5.jpg b/App12/app/src/main/res/drawable/tupianbackground5.jpg new file mode 100644 index 0000000..e8e0bd1 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground5.jpg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground6.jpg b/App12/app/src/main/res/drawable/tupianbackground6.jpg new file mode 100644 index 0000000..ff97d0b Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground6.jpg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground7.jpg b/App12/app/src/main/res/drawable/tupianbackground7.jpg new file mode 100644 index 0000000..e24dce5 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground7.jpg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground8.jpg b/App12/app/src/main/res/drawable/tupianbackground8.jpg new file mode 100644 index 0000000..13c9a1b Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground8.jpg differ diff --git a/App12/app/src/main/res/drawable/tupianbackground9.jpeg b/App12/app/src/main/res/drawable/tupianbackground9.jpeg new file mode 100644 index 0000000..0021eb5 Binary files /dev/null and b/App12/app/src/main/res/drawable/tupianbackground9.jpeg differ diff --git a/App12/app/src/main/res/drawable/twotone_person_add_alt_24.xml b/App12/app/src/main/res/drawable/twotone_person_add_alt_24.xml new file mode 100644 index 0000000..b3a2a80 --- /dev/null +++ b/App12/app/src/main/res/drawable/twotone_person_add_alt_24.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/App12/app/src/main/res/drawable/zhibo1.jpeg b/App12/app/src/main/res/drawable/zhibo1.jpeg new file mode 100644 index 0000000..f563da0 Binary files /dev/null and b/App12/app/src/main/res/drawable/zhibo1.jpeg differ diff --git a/App12/app/src/main/res/drawable/zhibo2.jpg b/App12/app/src/main/res/drawable/zhibo2.jpg new file mode 100644 index 0000000..63fffec Binary files /dev/null and b/App12/app/src/main/res/drawable/zhibo2.jpg differ diff --git a/App12/app/src/main/res/drawable/zhibo3.jpg b/App12/app/src/main/res/drawable/zhibo3.jpg new file mode 100644 index 0000000..6d20307 Binary files /dev/null and b/App12/app/src/main/res/drawable/zhibo3.jpg differ diff --git a/App12/app/src/main/res/drawable/zhibo4.jpg b/App12/app/src/main/res/drawable/zhibo4.jpg new file mode 100644 index 0000000..e4d7bd8 Binary files /dev/null and b/App12/app/src/main/res/drawable/zhibo4.jpg differ diff --git a/App12/app/src/main/res/drawable/zhibo5.jpg b/App12/app/src/main/res/drawable/zhibo5.jpg new file mode 100644 index 0000000..3e90776 Binary files /dev/null and b/App12/app/src/main/res/drawable/zhibo5.jpg differ diff --git a/App12/app/src/main/res/drawable/zhibo6.jpg b/App12/app/src/main/res/drawable/zhibo6.jpg new file mode 100644 index 0000000..e66d108 Binary files /dev/null and b/App12/app/src/main/res/drawable/zhibo6.jpg differ diff --git a/App12/app/src/main/res/drawable/zhibo7.jpg b/App12/app/src/main/res/drawable/zhibo7.jpg new file mode 100644 index 0000000..4507ae9 Binary files /dev/null and b/App12/app/src/main/res/drawable/zhibo7.jpg differ diff --git a/App12/app/src/main/res/drawable/zhibo8.jpg b/App12/app/src/main/res/drawable/zhibo8.jpg new file mode 100644 index 0000000..7085d80 Binary files /dev/null and b/App12/app/src/main/res/drawable/zhibo8.jpg differ diff --git a/App12/app/src/main/res/layout/activity_main.xml b/App12/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..fb6dac4 --- /dev/null +++ b/App12/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,33 @@ + + + + + + \ No newline at end of file diff --git a/App12/app/src/main/res/layout/activity_play_music.xml b/App12/app/src/main/res/layout/activity_play_music.xml new file mode 100644 index 0000000..9c43e8c --- /dev/null +++ b/App12/app/src/main/res/layout/activity_play_music.xml @@ -0,0 +1,53 @@ + + + + + + + +