Android实现百度网盘一些功能

Posted JackySei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android实现百度网盘一些功能相关的知识,希望对你有一定的参考价值。

该项目是一个android项目,适合新手,运用了很多的常见组件和布局。
项目亮点在于运用了百度网盘的API,通过授权可以在APP中展示授权账号的百度网盘里面的内容,展示的效果如文中图片所示。除此之外还有登录页运用缓存登录,还有历史记录页等等。
适用范围:
1.用于完成学校Android作业的朋友。(代码量大,逼格拉满)
2.需要一个Android项目来学习技术的朋友。
3.想要写一个网盘之类软件但是自己不想写界面的朋友,可以再此之上继续自己添加内容。
4.想要使用百度网盘API,但是具体不知道怎么操作的朋友。

前言

写这个项目是为了继续打打android的基础,另外还了解到了一些新方法和小技巧所以想来用用练练手,比如调用百度api来访问个人百度网盘中的头像名称项目文件等等,继续深入还可以在App中修改个人百度网盘中的文件。

项目结构

结构是

登录界面

只是主观简单的模仿了一下,可能有点丑。
activity_main

<?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=".activity.MainActivity">

    <TextView
        app:layout_constraintTop_toTopOf="parent"
        android:id="@+id/txt_title1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"
        android:gravity="center"
        android:textSize="30sp"
        android:textColor="#fff"
        android:background="@color/colorBtnEnable"
        android:padding="5dp"
        />

    <EditText
        android:padding="10dp"
        android:id="@+id/et_login_user"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/txt_title"
        android:hint="请输入手机号/用户名/邮箱"
        android:background="@drawable/bac_1"
        android:layout_margin="@dimen/marginSize"
        tools:ignore="MissingConstraints"
/>

    <EditText
        android:padding="10dp"
        android:id="@+id/et_login_psw"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="密码"
        android:background="@drawable/bac_1"
        android:layout_margin="@dimen/marginSize"
        app:layout_constraintTop_toBottomOf="@+id/et_login_user"
        tools:ignore="MissingConstraints" />
    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:enabled="false"
        android:text="登录"
        android:background="@drawable/bac_2"
        android:layout_margin="@dimen/marginSize"
        app:layout_constraintTop_toBottomOf="@+id/et_login_psw"
        tools:ignore="MissingConstraints" />
    <ImageButton
        android:foregroundGravity="center"
        android:id="@+id/ib_login_psw_visible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/et_login_user"
        app:layout_constraintBottom_toBottomOf="@+id/et_login_psw"
        app:layout_constraintRight_toRightOf="@id/et_login_psw" />
    <ImageView
        android:id="@+id/img"
        android:src="@mipmap/baidu_resultlogo"
        app:layout_constraintTop_toBottomOf="@+id/txt_title1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/marginSize"
        tools:ignore="MissingConstraints" />
<TextView
    android:id="@+id/txt_title"
    android:layout_width="wrap_content"
    app:layout_constraintTop_toBottomOf="@id/img"
    android:layout_height="wrap_content"
    android:text="欢迎登录百度账号"
    android:textColor="#000"
    android:textSize="35sp"
    android:layout_margin="@dimen/marginSize"
    tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>


然后在这个界面中做一些设置。

在这里插入代码片import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import com.example.baidudisk.R;

public class MainActivity extends AppCompatActivity implements View.OnClickListener

EditText mUserEt,mPswEt;
Button mLoginBtn;
private ImageButton mPswVisibleBtn;
private boolean mPswVisible=false;
private static final String SP_IS_LOGIN="is_login";
private static final String USER="user";
private static final String PSW="psw";
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setStatusBarFullTransparent();
        mPswVisibleBtn=findViewById(R.id.ib_login_psw_visible);
        mLoginBtn=findViewById(R.id.btn_login);
        mUserEt=findViewById(R.id.et_login_user);
        mPswEt=findViewById(R.id.et_login_psw);
        setPswVisible();
        mUserEt.addTextChangedListener(new TextWatcher() 
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) 

            

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) 

            

            @Override
            public void afterTextChanged(Editable s) 
             setBtnBg(s);
            
        );
        mPswEt.addTextChangedListener(new TextWatcher() 
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) 

            

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) 

            

            @Override
            public void afterTextChanged(Editable s) 
                setBtnBg(s);
            
        );
        mLoginBtn.setOnClickListener(this);
        mPswVisibleBtn.setOnClickListener(this);
    

    private void setPswVisible() 
        mPswVisibleBtn.setBackgroundResource(mPswVisible?R.mipmap.open:R.mipmap.hide);
        mPswEt.setTransformationMethod(mPswVisible? HideReturnsTransformationMethod.getInstance(): PasswordTransformationMethod.getInstance());
        mPswEt.setSelection(mPswEt.getText().toString().length());
        mPswVisible=!mPswVisible;
    

    private void setBtnBg(Editable s) 
        if(mUserEt.getText().length()>0&&mPswEt.getText().length()>0)
        
            mLoginBtn.setEnabled(true);
            mLoginBtn.setBackgroundColor(getResources().getColor(R.color.colorBtnEnable));
            mLoginBtn.setTextColor(Color.WHITE);
        
        else
        
            mLoginBtn.setEnabled(false);
            mLoginBtn.setBackgroundColor(getResources().getColor(R.color.colorBtnDissablr));
            mLoginBtn.setTextColor(getResources().getColor(R.color.colorTextDisable));
        
    

    //状态栏透明
    protected void setStatusBarFullTransparent() 
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP)
        
            Window window=getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
        else if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT)
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        
    

    @Override
    public void onClick(View v) 
        switch (v.getId())
        
            case R.id.btn_login:
                if("swust".equals(mPswEt.getText().toString().trim())&&"swust".equals(mUserEt.getText().toString().trim()))
            
                saveUserNameAndPsw();
                Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                Intent intent =new Intent(MainActivity.this,HomeActivity.class);
                intent.putExtra("str1",mUserEt.getText().toString());
                startActivity(intent);
            else
                    Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();
                break;
            case R.id.ib_login_psw_visible:
                setPswVisible();
                break;
        
    

    /**
     * 保存用户名和密码
     */
    private void saveUserNameAndPsw()
        getSharedPreferences(SP_IS_LOGIN, Context.MODE_PRIVATE)
                .edit()
                .putString(USER,mUserEt.getText().toString())
                .putString(PSW,mPswEt.getText().toString())
                .apply();
    
    /**
     * 填充用户名和密码
     */
    private void fillUserNameAndPsw()
        String user= getSharedPreferences(SP_IS_LOGIN,MODE_PRIVATE)
                .getString(USER,"");
        String psw =getSharedPreferences(SP_IS_LOGIN,MODE_PRIVATE)
                .getString(PSW,"");
        mUserEt.setText(user);
        mPswEt.setText(psw);
        mUserEt.setSelection(mUserEt.getText().length());
    
    @Override
    protected void onStart() 
        super.onStart();
        fillUserNameAndPsw();
    

实现的一些功能

该页面中实现的功能有:
1.当账号和密码都有内容时按钮会变成蓝色。
2.点击密码右侧的眼睛按钮可以实现密码可见与隐藏的切换。
3.使用SharedPreferences实现对账号和密码的存储并在下次启动时直接填充在文本框中。这次并没有实现注册功能,在上个项目中已经有例子了。

主界面

在这个项目主页面只实现两个子页面,上个项目中运用的是viewpager+fragment的方法,在这个项目中,为了简单起见只采用两个fragment实现页面即可。

一个是文件列表,一个是个人中心。
登录成功之后跳转到HomeActivity

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.os.Bundle;
import android.view.View;

import com.example.baidudisk.R;

public class HomeActivity extends AppCompatActivity
    FileFragment fileFragment=new FileFragment();
    ProFileFragment profileFragment=new ProFileFragment();
    FragmentManager fragmentManager=getSupportFragmentManager();
    FragmentTransaction transaction =fragmentManager.beginTransaction();
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        transaction.add(R.id.fragment,fileFragment);
        transaction.commit();
    

    public void mePage(View view) 
        changeFragment(R.id.fragment,profileFragment);
    

    public void filePage(View view) 
        changeFragment(R.id.fragment,fileFragment);
    

    void changeFragment(int resource,Fragment fragment)
    
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction transaction =fragmentManager.beginTransaction();
        transaction.replace(resource,fragment);
        transaction.commit();
    

实现了两个fragment之间的切换。(我认为这算是最简单的子界面的切换方式)
然后是他的布局文件
activity_home

<?xml version="1.0" encoding="utf-8"?>
<百度网盘数据遭泄露,云端文件需加密实现双重保护

自己动手用Springboot实现仿百度网盘

Android开发笔记(一百零九)利用网盘实现云存储

记录android百度地图的一些细节功能的实现。

Spring AOP实战:百度网盘密码数据兼容处理

Spring AOP实战:百度网盘密码数据兼容处理