用Android做一个简单的音乐播放器(上)

这一学期要结束了,我用Android写了一个音乐播放器,算是给它画上个完美的句号,里面有登录,注册,这个APP还有很多功能没完善,有时间了在加一些料。效果图如下:

登录、注册直接用的是Android自带的SQLite数据库,点击com.exammyapplicationple——>new——>Package写一个Service包,自建的User,DatabaseHelper两个Java类,点击Service——>new——>Service中写,创建UserService,点击Java——>new——>Activity——>Empty Activity建两个登录、注册的Activity。因为Android默认是先启动MainActivity,所以要在AndroidManifest里面更换MainActivity和LoginActivity的位置,换完之后代码截图:

User代码

import java.io.Serializable;

public class User implements Serializable {
    private int id;
    private String username;
    private String password;

    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    public User(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }
    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;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password="
                + password + "]";
    }

}

DatabaseHelper代码
package com.example.myapplication.Service;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DatabaseHelper extends SQLiteOpenHelper {
    static String name="user.db";
    static int dbVersion=1;
    public DatabaseHelper(Context context){
        super(context,name,null,dbVersion);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20))";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

UserService代码
package com.example.myapplication.Service;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.myapplication.User;

public class UserService {
    private DatabaseHelper dbHelper;
    public UserService(Context context){
        dbHelper=new DatabaseHelper(context);
    }
    public boolean login(String username,String password){
        SQLiteDatabase sdb=dbHelper.getReadableDatabase();
        String sql="select * from user where username=? and password=?";
        Cursor cursor=sdb.rawQuery(sql, new String[]{username,password});
        if(cursor.moveToFirst()==true){
            cursor.close();
            return true;
        }
        return false;
    }
    public boolean register(User user){
        SQLiteDatabase sdb=dbHelper.getReadableDatabase();
        String sql="insert into user(username,password) values(?,?)";
        Object obj[]={user.getUsername(),user.getPassword()};
        sdb.execSQL(sql, obj);
        return true;
    }
}

login页面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/back"
        android:orientation="vertical">

    <!--显示头像,这里把头像定为了固定图像,这里完全可以为每个账户挑选各自的头像-->
    <ImageView
            android:id="@+id/iv_head"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_marginTop="25dp"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/go_back"/>
    <!--输入框-->
    <EditText
            android:id="@+id/et_user_name"
            android:layout_width="fill_parent"
            android:layout_height="48dp"
            android:layout_marginTop="35dp"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/login_user_name_bg"
            android:drawableLeft="@drawable/ic_baseline_person_24"
            android:drawablePadding="10dp"
            android:paddingLeft="8dp"
            android:gravity="center_vertical"
            android:hint="请输入用户名"
            android:singleLine="true"
            android:textColor="#000000"
            android:textColorHint="#a3a3a3"
            android:textSize="14sp"/>
    <!--输入框-->
    <EditText
            android:id="@+id/et_psw"
            android:layout_width="fill_parent"
            android:layout_height="48dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:background="@drawable/login_psw_bg"
            android:drawableLeft="@drawable/ic_lock"
            android:drawablePadding="10dp"
            android:paddingLeft="8dp"
            android:gravity="center_vertical"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:singleLine="true"
            android:textColor="#000000"
            android:textColorHint="#a3a3a3"
            android:textSize="14sp"/>
    <!--上面inputType设置为textPassword,在输入密码时就会隐藏密码  -->

    <!--按钮-->
    <Button
            android:id="@+id/btn_login"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:layout_marginTop="15dp"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/register_selector"
            android:text="登 录"
            android:textColor="@android:color/white"
            android:textSize="18sp"/>
    <Button
            android:id="@+id/btn_register"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:layout_marginTop="30dp"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/register_selector"
            android:text="注 册"
            android:textColor="@android:color/white"
            android:textSize="18sp"/>
</LinearLayout>

register

<?xml version="1.0" encoding="utf-8"?>
<!--注册界面-->
<!--这里的布局放置是: 1 个 ImageView 控件,用于显示用户头像;3 个 EditText 控件,用于输入用户名、密码、再次输入密码;1 个 Button 控件为注册按钮-->
<!--修改 activity_register.xml 为 LinearLayout 布局-->
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/activity_register"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/register_pwd"
        android:orientation="vertical">
    <include layout="@layout/main_title_bar"></include><!--引入标题栏-->
    <ImageView
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="25dp"
            android:src="@drawable/x"/>
    <!--三个编辑框-->
    <EditText
            android:id="@+id/et_user_name"
            android:layout_width="fill_parent"
            android:layout_height="48dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:layout_marginTop="35dp"
            android:background="@drawable/login_user_name_bg"
            android:drawableLeft="@drawable/ic_baseline_person_24"
            android:drawablePadding="10dp"
            android:gravity="center_vertical"
            android:hint="请输入用户名"
            android:paddingLeft="8dp"
            android:singleLine="true"
            android:textColor="#000000"
            android:textColorHint="#a3a3a3"
            android:textSize="14sp"/>
    <EditText
            android:id="@+id/et_psw"
            android:layout_width="fill_parent"
            android:layout_gravity="center_horizontal"
            android:layout_height="48dp"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:background="@drawable/login_user_name_bg"
            android:drawableLeft="@drawable/ic_lock"
            android:drawablePadding="10dp"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:paddingLeft="8dp"
            android:singleLine="true"
            android:textColor="#000000"
            android:textColorHint="#a3a3a3"
            android:textSize="14sp"/>
    <EditText
            android:id="@+id/et_psw_again"
            android:layout_width="fill_parent"
            android:layout_height="48dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:background="@drawable/login_user_name_bg"
            android:drawableLeft="@drawable/ic_lock"
            android:drawablePadding="10dp"
            android:hint="请再次输入密码"
            android:inputType="textPassword"
            android:paddingLeft="8dp"
            android:singleLine="true"
            android:textColor="#000000"
            android:textColorHint="#a3a3a3"
            android:textSize="14sp"/>
    <Button
            android:id="@+id/btn_register"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:layout_marginTop="15dp"
            android:background="@drawable/register_selector"
            android:text="注 册"
            android:textColor="@android:color/white"
            android:textSize="18sp"/>
</LinearLayout>

因为要实现登录与注册跳转,引入main_title_bar.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<!--标题栏与返回键的创建,独立在main_title_bar.xml中-->
<!--标题栏设置高度为50dp,宽度为match_parent,设置背景颜色为透明 @android:color/transparent-->
<!--RelativeLayout为相对布局-->
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/title_bar"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@android:color/transparent">
    <!--设置返回键TextView为高度50dp,宽度为50dp;id为android:id="@+id/tv_back"-->
    <!--layout_alignParentLeft为与父控件左对齐-->
    <!--layout_centerVertical为控件垂直居中-->
    <!--标题栏界面中的返回键在按下与弹起时,返回键会有明显的区别,这种效果通过背景选择器进行实现-->
    <TextView
            android:id="@+id/tv_back"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:background="@drawable/ic_back"/>
    <!--设置id为android:id="@+id/tv_main_title-->
    <!--该TextView为显示文本-->
    <!--layout_centerInparent为居中显示-->
    <TextView
            android:id="@+id/tv_main_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@android:color/white"
            android:textSize="20sp"
            android:layout_centerInParent="true"/>

</RelativeLayout>

login后台

package com.example.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
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 com.example.myapplication.Service.UserService;


public class LoginActivity extends AppCompatActivity {
    private EditText username;
    private EditText password;
    private Button login;
    private Button register;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        findViews();
    }
    private void findViews() {
        username=(EditText) findViewById(R.id.et_user_name);
        password=(EditText) findViewById(R.id.et_psw);
        login=(Button) findViewById(R.id.btn_login);
        register=(Button) findViewById(R.id.btn_register);

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name=username.getText().toString();
                System.out.println(name);
                String pass=password.getText().toString();
                System.out.println(pass);

                Log.i("TAG",name+"_"+pass);
                UserService uService=new UserService(LoginActivity.this);
                boolean flag=uService.login(name, pass);

                if(flag){
                    Log.i("TAG","登录成功");
                    Toast.makeText(LoginActivity.this,"登录成功", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                    startActivity(intent);
                }else{
                    Log.i("TAG","登录失败");
                    Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_LONG).show();
                }

            }
        });
        register.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intent=new Intent(LoginActivity.this,RegisteredActivity.class);
                startActivity(intent);
            }
        });
    }
}

register后台

package com.example.myapplication;


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.*;
import com.example.myapplication.Service.UserService;

public class RegisteredActivity extends AppCompatActivity {
    EditText username;
    EditText password;
    Button register;
    TextView iv_back;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_registered);
        findViews();
        register.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String name=username.getText().toString().trim();
                String pass=password.getText().toString().trim();
                Log.i("TAG",name+"_"+pass);
                UserService uService=new UserService(RegisteredActivity.this);
                User user=new User();
                user.setUsername(name);
                user.setPassword(pass);

                uService.register(user);
                Toast.makeText(RegisteredActivity.this, "注册成功", Toast.LENGTH_LONG).show();
            }

        });
    }


    private void findViews() {
        username=(EditText) findViewById(R.id.et_user_name);
        password=(EditText) findViewById(R.id.et_psw);
        register=(Button) findViewById(R.id.btn_register);
        iv_back = (TextView)findViewById(R.id.tv_back);
        iv_back.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(RegisteredActivity.this, LoginActivity.class);
                startActivity(intent);
            }
        });
    }
}

因为我这个有三个页面,所以要写3个fragment,main页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical"
        android:background="@color/white">

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:background="@color/teal_200">

        <TextView
                android:id="@+id/menu1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:text="歌曲"
                android:textSize="25dp"/>
        <TextView
                android:id="@+id/menu2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:text="歌手"
                android:textSize="25dp"/>
        <TextView
                android:id="@+id/menu3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:text="弹奏"
                android:textSize="25dp"/>


    </LinearLayout>
    <LinearLayout android:layout_width="wrap_content"
                  android:layout_height="150dp"
                  android:orientation="horizontal"
                  android:background="@drawable/li">
    </LinearLayout>
//引入fragment
    <FrameLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="9">
    </FrameLayout>

</LinearLayout>

MainActivity后台

package com.example.myapplication;

import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;

import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    //创建需要用到的控件的变量
    private TextView tv1,tv2,tv3;
    private FragmentManager fm;
    private FragmentTransaction ft;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定控件
        tv1=(TextView)findViewById(R.id.menu1);
        tv2=(TextView)findViewById(R.id.menu2);
        tv3=(TextView)findViewById(R.id.menu3);
        //设置监听器,固定写法
        tv1.setOnClickListener(this);
        tv2.setOnClickListener(this);
        tv3.setOnClickListener(this);
        //若是继承FragmentActivity,fm=getFragmentManger();
        fm=getSupportFragmentManager();
        //fm可以理解为Fragment显示的管理者,ft就是它的改变者
        ft=fm.beginTransaction();
        //默认情况下就显示frag1
        ft.replace(R.id.content,new frag1());
        //提交改变的内容
        ft.commit();
    }
    @Override
    //控件的点击事件
    public void onClick(View v){
        ft=fm.beginTransaction();
        //切换选项卡
        switch (v.getId()){
            case R.id.menu1:
                ft.replace(R.id.content,new frag1());
                break;
            case R.id.menu2:
                ft.replace(R.id.content,new frag2());
                break;
            case R.id.menu3:
                ft.replace(R.id.content,new frag3());
                break;
            default:
                break;
        }
        ft.commit();
    }
}

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殇雪蓝冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值