android 仿微信demo————注册功能完善添加头像功能(移动端)

android 仿微信demo————微信启动界面实现

android 仿微信demo————注册功能实现(移动端)

android 仿微信demo————注册功能实现(服务端)

android 仿微信demo————登录功能实现(移动端)

android 仿微信demo————登录功能实现(服务端)

android 仿微信demo————微信主界面实现

android 仿微信demo————微信消息界面实现(移动端)

android 仿微信demo————微信消息界面实现(服务端)

android 仿微信demo————微信通讯录界面功能实现(移动端,服务端)

android 仿微信demo————微信发现界面实现

android 仿微信demo————微信顶部操作栏界面实现

android 仿微信demo————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)

android 仿微信demo————微信顶部操作栏加号按钮实现(弹出子菜单)

android 仿微信demo————注册功能完善添加头像功能(移动端)

源码获取点我,记得给个start哦

在前面文章只是简单实现前端的表单,以及表单处理,并没有实现头像功能,由于第四个界面个人信息有个头像数据,所以这一篇在移动端实现添加头像功能,只需在前面的代码做相应添加即可

移动端

修改注册布局
reigister.xml

<?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="@color/title"android:orientation="vertical"><ImageViewandroid:layout_width="17dp"android:layout_height="17dp"android:layout_marginLeft="20dp"android:layout_marginTop="45dp"android:onClick="rigister_activity_back"android:src="@drawable/backpay" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginTop="25dp"android:text="手机号注册"android:textColor="@color/loginText"android:textSize="25sp" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="64dp" ><ImageViewandroid:id="@+id/iv_photo"android:layout_width="64dp"android:layout_height="64dp"android:layout_alignParentRight="true"android:layout_marginRight="10dp"android:src="@drawable/icon_register" /><EditTextandroid:id="@+id/reg_name"android:layout_width="match_parent"android:layout_height="48dp"android:layout_alignParentBottom="true"android:layout_marginRight="10dp"android:layout_toLeftOf="@id/iv_photo"android:background="@null"android:gravity="center_vertical"android:hint="例如:陈晨"android:paddingLeft="120dp"android:singleLine="true"android:textColorHint="#DDDDDD"android:textSize="16sp" /><TextViewandroid:layout_width="90dp"android:layout_height="48dp"android:layout_alignLeft="@id/reg_name"android:layout_alignParentBottom="true"android:layout_marginLeft="30dp"android:gravity="center_vertical"android:text="昵称"android:textColor="#353535"android:textSize="16sp" /></RelativeLayout><ImageViewandroid:id="@+id/reg_diver1"android:layout_width="320dp"android:layout_height="1dp"android:layout_gravity="center_horizontal"android:background="@color/input_dvier" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:text="手机号"android:textColor="@color/loginText"android:textSize="16sp" /><EditTextandroid:id="@+id/reg_phone"android:layout_width="200dp"android:layout_height="wrap_content"android:layout_marginLeft="39dp"android:background="@null"android:hint="请填写手机号"android:singleLine="true"android:textColorHint="@color/textColorHint"android:textCursorDrawable="@drawable/edit_cursor_color"android:textSize="16sp" /></LinearLayout><ImageViewandroid:id="@+id/reg_diver2"android:layout_width="320dp"android:layout_height="1dp"android:layout_gravity="center_horizontal"android:layout_marginTop="17dp"android:background="@color/input_dvier" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:text="密码"android:textColor="@color/loginText"android:textSize="16sp" /><EditTextandroid:id="@+id/reg_passwd"android:layout_width="200dp"android:layout_height="wrap_content"android:layout_marginLeft="55dp"android:background="@null"android:hint="请填写密码"android:inputType="textPassword"android:singleLine="true"android:textColorHint="@color/textColorHint"android:textCursorDrawable="@drawable/edit_cursor_color"android:textSize="16sp" /></LinearLayout><ImageViewandroid:id="@+id/reg_diver3"android:layout_width="320dp"android:layout_height="1dp"android:layout_gravity="center_horizontal"android:layout_marginTop="17dp"android:background="@color/input_dvier" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="40dp"android:gravity="center_horizontal"><Buttonandroid:id="@+id/reg_button"android:layout_width="321dp"android:layout_height="48dp"android:background="@drawable/login_button_shape"android:text="注册"android:textColor="@color/loginButtonText"android:textSize="16sp" /></LinearLayout></LinearLayout>

上面代码改动的地方就是添加了一个ImageView组件,可以点击添加头像并显示,点击事件在注册activity中处理

修改注册activity

package com.example.wxchatdemo;import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;import com.example.wxchatdemo.tools.IEditTextChangeListener;
import com.example.wxchatdemo.tools.RandomUserName;
import com.example.wxchatdemo.tools.WorksSizeCheckUtil;import org.json.JSONObject;import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Reigister extends AppCompatActivity {//声明组件private EditText username;private EditText phone;private EditText password;private Button button;private ImageView iv_photo;private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择private static final int PHOTO_REQUEST_CUT = 3;// 结果private String imageName;//随机微信号private String randomNumber;//自定义一个UI修改机制private MyHander myhander = new MyHander();private boolean flag = false; //表单提交成后改成true,开始传输图片@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.register); //设置布局/* 隐藏自带标题*/ActionBar actionBar = getSupportActionBar();if (actionBar != null) {actionBar.hide();}if (Build.VERSION.SDK_INT >= 21) {View decorView = getWindow().getDecorView();int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //全屏显示| View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; //因为背景为浅色所以将状态栏字体设置为黑色decorView.setSystemUiVisibility(option);getWindow().setStatusBarColor(Color.TRANSPARENT);}initViews();  // 初始化布局元素// 设置注册按钮是否可点击if (username.getText() + "" == "" || phone.getText() + "" == "" || password.getText() + "" == "") {button.setEnabled(false);} else {button.setEnabled(true);}inputFocus(); //监听EditView变色buttonChangeColor(); //监听登录按钮变色//button的点击事件事件button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {/*判断输入的手机号格式对不对,对的话开一个线程完成网络请求操作*/Pattern pattern = Pattern.compile("^(13[0-9]|15[0-9]|153|15[6-9]|180|18[23]|18[5-9])\\d{8}$");Matcher matcher = pattern.matcher(phone.getText());if (matcher.matches()) {flag = true;// 开一个线程完成网络请求操作new Thread(new Runnable() {@Overridepublic void run() {httpUrlConnPost(Reigister.this.username.getText() + "",phone.getText() + "", password.getText() + "");}}).start();} else {Toast.makeText(getApplicationContext(), "手机格式错误", Toast.LENGTH_LONG).show();}if (flag) {flag = false;// 开一个线程完成网络请求操作new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(1000);httpUrlConnPostImage();} catch (InterruptedException e) {e.printStackTrace();}}}).start();}}});//头像点击事件iv_photo.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {getNowTime();imageName = getNowTime() + ".png";Intent intent = new Intent(Intent.ACTION_PICK, null);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");startActivityForResult(intent, PHOTO_REQUEST_GALLERY);}});}@SuppressLint("SdCardPath")@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {if (resultCode == RESULT_OK) {switch (requestCode) {case PHOTO_REQUEST_GALLERY:if (data != null)startPhotoZoom(data.getData(), 480);break;case PHOTO_REQUEST_CUT:Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/zhuojiajin/"+ imageName);iv_photo.setImageBitmap(bitmap);break;}super.onActivityResult(requestCode, resultCode, data);}}@SuppressLint("SdCardPath")private void startPhotoZoom(Uri uri1, int size) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri1, "image/*");// crop为true是设置在开启的intent中设置显示的view可以剪裁intent.putExtra("crop", "true");// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX,outputY 是剪裁图片的宽高intent.putExtra("outputX", size);intent.putExtra("outputY", size);intent.putExtra("return-data", false);intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File("/sdcard/zhuojiajin/", imageName)));intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());intent.putExtra("noFaceDetection", true); // no face detectionstartActivityForResult(intent, PHOTO_REQUEST_CUT);}@SuppressLint("SimpleDateFormat")private String getNowTime() {Date date = new Date(System.currentTimeMillis());SimpleDateFormat dateFormat = new SimpleDateFormat("MMddHHmmssSS");return dateFormat.format(date);}/*在这里面获取到每个需要用到的控件的实例*/@SuppressLint("NewApi")public void initViews() {// 得到所有的组件username = (EditText) this.findViewById(R.id.reg_name);phone = (EditText) this.findViewById(R.id.reg_phone);password = (EditText) this.findViewById(R.id.reg_passwd);button = (Button) this.findViewById(R.id.reg_button);iv_photo = (ImageView) findViewById(R.id.iv_photo);}/*监听EditView变色*/public void inputFocus() {username.setOnFocusChangeListener(new View.OnFocusChangeListener() {@Overridepublic void onFocusChange(View v, boolean hasFocus) {if (hasFocus) {// 此处为得到焦点时的处理内容ImageView imageView = (ImageView) findViewById(R.id.reg_diver1);imageView.setBackgroundResource(R.color.input_dvier_focus);} else {// 此处为失去焦点时的处理内容ImageView imageView = (ImageView) findViewById(R.id.reg_diver1);imageView.setBackgroundResource(R.color.input_dvier);}}});phone.setOnFocusChangeListener(new View.OnFocusChangeListener() {@Overridepublic void onFocusChange(View v, boolean hasFocus) {if (hasFocus) {// 此处为得到焦点时的处理内容ImageView imageView = (ImageView) findViewById(R.id.reg_diver2);imageView.setBackgroundResource(R.color.input_dvier_focus);} else {// 此处为失去焦点时的处理内容ImageView imageView = (ImageView) findViewById(R.id.reg_diver2);imageView.setBackgroundResource(R.color.input_dvier);}}});password.setOnFocusChangeListener(new View.OnFocusChangeListener() {@Overridepublic void onFocusChange(View v, boolean hasFocus) {if (hasFocus) {// 此处为得到焦点时的处理内容ImageView imageView = (ImageView) findViewById(R.id.reg_diver3);imageView.setBackgroundResource(R.color.input_dvier_focus);} else {// 此处为失去焦点时的处理内容ImageView imageView = (ImageView) findViewById(R.id.reg_diver3);imageView.setBackgroundResource(R.color.input_dvier);}}});}/*监听登录按钮变色*/public void buttonChangeColor() {//创建工具类对象 把要改变颜色的Button先传过去WorksSizeCheckUtil.textChangeListener textChangeListener = new WorksSizeCheckUtil.textChangeListener(button);textChangeListener.addAllEditText(username, phone, password);//把所有要监听的EditText都添加进去//接口回调 在这里拿到boolean变量 根据isHasContent的值决定 Button应该设置什么颜色WorksSizeCheckUtil.setChangeListener(new IEditTextChangeListener() {@Overridepublic void textChange(boolean isHasContent) {if (isHasContent) {button.setBackgroundResource(R.drawable.login_button_focus);button.setTextColor(getResources().getColor(R.color.loginButtonTextFouse));} else {button.setBackgroundResource(R.drawable.login_button_shape);button.setTextColor(getResources().getColor(R.color.loginButtonText));}}});}/*发送请求的主要方法*/public void httpUrlConnPost(String name, String phone, String password) {/*使用工具类生成随机的微信号*/RandomUserName ran = new RandomUserName();randomNumber = ran.generate();HttpURLConnection urlConnection = null;URL url;try {// 请求的URL地地址url = new URL("http://100.2.178.10:8080/AndroidServer1_war_exploded/Reigister");urlConnection = (HttpURLConnection) url.openConnection();// 打开http连接urlConnection.setConnectTimeout(3000);// 连接的超时时间urlConnection.setUseCaches(false);// 不使用缓存// urlConnection.setFollowRedirects(false);是static函数,作用于所有的URLConnection对象。urlConnection.setInstanceFollowRedirects(true);// 是成员函数,仅作用于当前函数,设置这个连接是否可以被重定向urlConnection.setReadTimeout(3000);// 响应的超时时间urlConnection.setDoInput(true);// 设置这个连接是否可以写入数据urlConnection.setDoOutput(true);// 设置这个连接是否可以输出数据urlConnection.setRequestMethod("POST");// 设置请求的方式urlConnection.setRequestProperty("Content-Type","application/json;charset=UTF-8");// 设置消息的类型urlConnection.connect();// 连接,从上述至此的配置必须要在connect之前完成,实际上它只是建立了一个与服务器的TCP连接JSONObject json = new JSONObject();// 创建json对象json.put("number", URLEncoder.encode(randomNumber, "UTF-8"));// 使用URLEncoder.encode对特殊和不可见字符进行编码json.put("name", URLEncoder.encode(name, "UTF-8"));json.put("phone", URLEncoder.encode(phone, "UTF-8"));json.put("password", URLEncoder.encode(password, "UTF-8"));// 把数据put进json对象中String jsonstr = json.toString();// 把JSON对象按JSON的编码格式转换为字符串// ------------字符流写入数据------------OutputStream out = urlConnection.getOutputStream();// 输出流,用来发送请求,http请求实际上直到这个函数里面才正式发送出去BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));// 创建字符流对象并用高效缓冲流包装它,便获得最高的效率,发送的是字符串推荐用字符流,其它数据就用字节流bw.write(jsonstr);// 把json字符串写入缓冲区中bw.flush();// 刷新缓冲区,把数据发送出去,这步很重要out.close();bw.close();// 使用完关闭Log.i("aa", urlConnection.getResponseCode() + "");//以下判斷是否訪問成功,如果返回的状态码是200则说明访问成功if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {// 得到服务端的返回码是否连接成功// ------------字符流读取服务端返回的数据------------InputStream in = urlConnection.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in));String str = null;StringBuffer buffer = new StringBuffer();while ((str = br.readLine()) != null) {// BufferedReader特有功能,一次读取一行数据buffer.append(str);}in.close();br.close();JSONObject rjson = new JSONObject(buffer.toString());Log.i("aa", "rjson=" + rjson);// rjson={"json":true}boolean result = rjson.getBoolean("json");// 从rjson对象中得到key值为"json"的数据,这里服务端返回的是一个boolean类型的数据System.out.println("json:===" + result);//如果服务器端返回的是true,则说明注册成功,否则注册失败if (result) {// 判断结果是否正确//在Android中http请求,必须放到线程中去作请求,但是在线程中不可以直接修改UI,只能通过hander机制来完成对UI的操作myhander.sendEmptyMessage(1);Log.i("用户:", "注册成功");} else {myhander.sendEmptyMessage(2);Log.i("用户:", "手机号已被注册");}} else {myhander.sendEmptyMessage(2);}} catch (Exception e) {e.printStackTrace();Log.i("aa", e.toString());myhander.sendEmptyMessage(2);} finally {urlConnection.disconnect();// 使用完关闭TCP连接,释放资源}}/*发送请求的主要方法*/public void httpUrlConnPostImage() {HttpURLConnection urlConnection = null;URL url;try {// 请求的URL地地址url = new URL("http://100.2.178.10:8080/AndroidServer1_war_exploded/Image");urlConnection = (HttpURLConnection) url.openConnection();// 打开http连接urlConnection.setConnectTimeout(3000);// 连接的超时时间urlConnection.setUseCaches(false);// 不使用缓存// urlConnection.setFollowRedirects(false);是static函数,作用于所有的URLConnection对象。urlConnection.setInstanceFollowRedirects(true);// 是成员函数,仅作用于当前函数,设置这个连接是否可以被重定向urlConnection.setReadTimeout(3000);// 响应的超时时间urlConnection.setDoInput(true);// 设置这个连接是否可以写入数据urlConnection.setDoOutput(true);// 设置这个连接是否可以输出数据urlConnection.setRequestMethod("POST");// 设置请求的方式urlConnection.setRequestProperty("Content-Type","application/json;charset=UTF-8");// 设置消息的类型urlConnection.connect();// 连接,从上述至此的配置必须要在connect之前完成,实际上它只是建立了一个与服务器的TCP连接// ------------字节流写入数据------------FileInputStream fis = new FileInputStream("/sdcard/zhuojiajin/" + imageName);OutputStream out = urlConnection.getOutputStream();// 输出流,用来发送请求,http请求实际上直到这个函数里面才正式发送出去BufferedOutputStream bos = new BufferedOutputStream(out);byte[] buf = new byte[1024];int len = 0;//往输出流里面投放数据//先将流文件变成byte[], 然后利用套接字的输出流发送给客户端while ((len = fis.read(buf)) != -1) {bos.write(buf, 0, len);bos.flush();// 刷新缓冲区,把数据发送出去,这步很重要}bos.close();// 使用完关闭//以下判斷是否訪問成功,如果返回的状态码是200则说明访问成功Log.i("aa", urlConnection.getResponseCode() + "");} catch (Exception e) {e.printStackTrace();Log.i("aa", e.toString());} finally {urlConnection.disconnect();// 使用完关闭TCP连接,释放资源}}// 在Android中不可以在线程中直接修改UI,只能借助Handler机制来完成对UI的操作class MyHander extends Handler {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//判断hander的内容是什么,如果是1则说明注册成功,如果是2说明注册失败switch (msg.what) {case 1:Log.i("aa", msg.what + "");Toast.makeText(getApplicationContext(), "注册成功",Toast.LENGTH_SHORT).show();/*跳转到登录页面并把微信号也传过去*/Intent intent = new Intent();intent.putExtra("weixin_number", randomNumber);intent.setClass(com.example.wxchatdemo.Reigister.this, LoginUser.class);startActivity(intent);com.example.wxchatdemo.Reigister.this.finish(); //结束当前activitybreak;case 2:Log.i("aa", msg.what + "");//這是一個提示消息Toast.makeText(getApplicationContext(), "手机号已被注册", Toast.LENGTH_LONG).show();}}}//返回按钮处理事件public void rigister_activity_back(View v) {/*跳转到微信启动页*/Intent intent = new Intent();intent.setClass(com.example.wxchatdemo.Reigister.this, Welcome.class);startActivity(intent);com.example.wxchatdemo.Reigister.this.finish(); //结束当前activity}
}

上面代码添加了ImageView监听器,点击可打开本地图库挑选一张图片进行剪切,点击保存后会把图片保存在手机sd卡中进行存储以显示在ImageView上,注册按钮的点击事件也进行了相应添加,在表单请求服务器代码添加了请求服务器传输图片的线程(以字节流传输),但是必须在表单请求成功后才能向服务器传输图片(防止手机号重复也传输图片)

在ActivityMainfest.xml中添加访问sd卡的权限
ActivityMainfest.xml

    <!-- 在SDCard中创建与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"tools:ignore="ProtectedPermissions" /><!-- 往SDCard写入数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.CAMERA"/>

在这里插入图片描述

在sd卡目录下创建存储图片的文件夹
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/254422.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

微信支付APIv3

文章目录 微信支付之前我的密钥啥的都是放到配置文件里面以后可以再写一个文件基础支付APIv3介绍获取验签和HttpClientAPIv3证书与密钥使用说明 微信支付的SDK工具Native支付流程我们程序运行时的日志也可以使用log.debug在方法堆栈里面查看我们程序执行的方法调用顺序内网穿透…

在线支付系列【8】微信支付之注册商户号

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录 前言注册商户号1. 微信扫码登录2. 创建申请单2.1 基本信息2.2 主体身份2.3 法人信息及受益人信息2.4 经营与行业信息2.5 结算账户2.6 补充信息2.7 查看申请单 签约方式一&#xff1a;手机签约方…

Scala函数

1.基本语法 解析main方法 def main(args: Array[String]): Unit {函数体}*def 关键字&#xff0c;声明一个函数 * main 方法名 * args 参数名称 * Array[String] 参数的类型 * Unit 返回值类型&#xff0c;相当于Java中的void&#xff0c;没有返回值 * {} 函数体函数省略规则 …

微信公众号注册时提示该主体注册数量已超过上限怎么办?

很多用户在注册或认证微信公众号时&#xff0c;遇到“该主体注册数量已超过上限”的问题&#xff0c;这是怎么回事呢&#xff1f; 原因是2018年11月16日微信官方对公众号注册数量做了调整&#xff1a; 1.个人主体注册公众号数量上限由2个调整为1个&#xff1b; 2.企业类主体注…

开通微信公众号流程所需资料及时间

2019独角兽企业重金招聘Python工程师标准>>> 序号 阶段 所需资料 所需时间 一、&#xff08;企业&#xff09;注册公众平台 使用未注册过微信公众号的邮箱注册、验证激活 即时二、 选择帐号类型 详情查看服务号、订阅号、企业号区别后选择类型 即时三、信息登记 选择…

支付宝、微信注册时间,轻松查看!

早几天分享过与微信年度报告查询微信使用多少天&#xff0c;朋友圈传播非常火爆&#xff0c;今天教大家一招如何查询支付宝使用多少天。 看到上图还能回想到当时的激动吗&#xff1f; 马上进入正题&#xff0c;不啰嗦&#xff0c;查看支付宝注册日期的方法&#xff0c;也超级简…

车载ECU休眠唤醒-TJA1145

前言 首先&#xff0c;请教大家几个小小问题&#xff0c;你清楚&#xff1a; 什么是TJA1145吗&#xff1f;你知道休眠唤醒控制基本逻辑是怎么样的吗&#xff1f;TJA1145又是如何控制ECU进行休眠唤醒的呢&#xff1f;使用TJA1145时有哪些注意事项呢&#xff1f; 今天&#xff…

oppor15x支持html吗,oppor15x配置参数详情 r15和17的亲儿子

oppor15x虽然看上去和oppor15这款手机比较相似&#xff0c;但是实际上&#xff0c;作为oppo的最新款手机&#xff0c;oppor15x的发布时间是在oppor17之后的&#xff0c;不仅如此&#xff0c;在外观方面&#xff0c;oppor15x和oppor17会更为相似&#xff0c;在配置方面却更偏向o…

oppo r15 android 8,OPPO R15体验:基于安卓8.1,ColorOS 5.0更好用

当目前智能手机硬件性能普遍过剩&#xff0c;越来越多的人们开始逐渐意识到&#xff0c;参数并不等于体验&#xff0c;反而是依附于硬件之上的操作系统很大程度上直接决定了一款智能手机的使用体验。 在当前智能手机市场&#xff0c;虽然说安卓系统占据了绝大部分市场份额&…

android 汇编 参数,安卓ARM汇编基础知识

ARM 是 Advanced RISC Machine 的缩写&#xff0c;可以理解为一种处理器的架构&#xff0c;还可以将它作为一套完整的处理器指令集。RISC(Reduced Instruction Set Computing) 精简指令集计算机&#xff1a;一种执行较少类型计算机指令的微处理器。 处理器指令集: 计算机处理命…

linux x64 寄存器 传参,Linux X86架构参数传递规则

背景 突然好奇x86架构下函数参数怎么传递的,之前只是听别人说过通过寄存器,但是怎么传,什么顺序都没有仔细研究过,也没有实际测试过,因此就想着用实践来检验一下咯。 传参顺序 在32位和64位机器上,寄存器名称不同,64位机器为rxx,32位机器为exx。传参顺序如下, 64位系统…

linux控制协程参数,Linux高性能网络:协程系列06-协程实现之切换-Go语言中文社区...

目录 6.协程实现之切换 问题&#xff1a;协程的上下文如何切换&#xff1f;切换代码如何实现&#xff1f; 首先来回顾一下x86_64寄存器的相关知识。x86_64 的寄存器有16个64位寄存器&#xff0c;分别是&#xff1a;%rax, %rbx, %rcx, %esi, %edi, %rbp, %rsp, %r8, %r9, %r10, …

陶瓷气体放电管参数含义详解

​很多客户反应&#xff0c;不太明白陶瓷气体放电管产品手册中的参数含义。不可否认&#xff0c;电路保护器件产品规格书手册用的语言大部分都是英文&#xff0c;没有一定的英文基础&#xff0c;还真消化不了。有时候&#xff0c;就算能看得懂&#xff0c;但是面对枯燥无味的参…

ARM寄存器及功能介绍/R0-R15寄存器

1、ARM 寄存器组介绍 ARM 处理器一般共有 37 个寄存器&#xff0c;其中包括&#xff1a; &#xff08;1&#xff09; 31 个通用寄存器&#xff0c;包括 PC&#xff08;程序计数器&#xff09;在内&#xff0c;都是 32 位的寄存器。 &#xff08;2&#xff09; 6 个状态寄存器…

x64 汇编 参数传递

参数传递在不同的系统上是不一样的 称作 calling convention 调用约定 windows rcx,rdx,r8,r9 用来存储整数或指针参数&#xff0c;按照从左到右的顺序 xmm0,1,2,3 用来存储浮点参数 其余参数会压入栈中。 linux 当参数在 6 个以内&#xff0c;参数从左到右依次放入寄存器:…

汇编和c语言函数的参数,C函数与汇编函数之间参数及返回值传递方法

AAPCS对ARM结构的一些标准做了定义,在这里我们只重点介绍函数调用部分,如图8所示,AAPCS为ARM的R0~R15寄存器做了定义,明确了它们在函数中的职责: 图 8 AAPCS关于ARM寄存器的定义 一、函数调用时的规则如下: 1、 父函数与子函数间的入口参数依次通过R0~R3这4个寄存器传递。…

台式计算机配置参数,整机配置参数以及性能测试_台式电脑评测-中关村在线

我们首先来看一看同方E500的硬件配置情况。 根据AIDA64所示,同方E500搭载了i5-7400处理器、8GB内存、128GB建兴固态硬盘以及1TB西部数据机械硬盘。这个配置对于商务办公机来讲是非常合理的,在性能与成本之间得到了最佳的平衡。那么具体性能表现又是如何呢?我们来继续往下看。…

此计算机核心参数,买电脑如何选CPU?这三个参数一定要看!

原标题&#xff1a;买电脑如何选CPU&#xff1f;这三个参数一定要看! CPU是电脑中的核心&#xff0c;也可以说是电脑的大脑&#xff0c;一直以来CPU与GPU那个重要都是争论不休的话题&#xff0c;四月份升级九代酷睿处理器的机械师笔记本拥有怎样的升级体验呢?高性能玩家该通过…

5G NR首版标准R15解读

5G定义了增强型移动宽带&#xff08;eMBB&#xff09;、超可靠低延迟通信&#xff08;URLLC&#xff09;、大规模机器类型通信&#xff08;mMTC&#xff09; 三大场景。针对这三大场景&#xff0c;在2018年6月已完成的3GPP R15标准不仅定义了5G NR&#xff08;新无线&#xff0…

oppo r15 android 8,抢不到小米8,就用OPPO R15吧

抢不到小米8&#xff0c;就用OPPO R15吧 2018-06-09 17:10:13 17点赞 21收藏 49评论 最近小米8好像很热门&#xff0c;于是&#xff0c;突然就想买个了&#xff0c;反正都是刘海屏千篇一律的手机&#xff0c;还是10年前好&#xff0c;手机款式都是百花齐放&#xff0c;各有各特…