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"?>
<百度网盘数据遭泄露,云端文件需加密实现双重保护