在开始之前可以先了解一些NFC的的基础知识。 连接

android nfc中MifareClassic格式的读写    http://www.cnblogs.com/jyycnblogs/p/5077609.html   
 NFC API Reference中英文   http://www.cnblogs.com/skyseraph/archive/2013/01/27/2876236.html#

感谢Eternal_memory 和 SkySeraph

部分解析

BaseMethodWebActivity是Activity的子类

showToastMessage是单纯的Toast通知

DataValues.NFCWriteLength  是长度限制

下面是我的开发代码,希望对你有帮助。

-------------------------------------------------------------


package com.Base;

import java.io.ByteArrayOutputStream;  
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;  
import java.text.DateFormat;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.List;  
import java.util.Locale;  
import com.main.HZZH.MenuActivity;
import cn.data.bean.DataValues;
import cn.data.bean.PublicMethod;
import android.app.Activity;  
import android.app.AlertDialog;  
import android.app.PendingIntent;  
import android.content.Context;
import android.content.DialogInterface;  
import android.content.Intent;  
import android.nfc.FormatException;
import android.nfc.NdefMessage;  
import android.nfc.NdefRecord;  
import android.nfc.NfcAdapter;  
import android.nfc.Tag;  
import android.nfc.tech.MifareClassic;  
import android.nfc.tech.MifareUltralight;  
import android.nfc.tech.Ndef;
import android.os.Bundle;  
import android.os.Parcelable;  
import android.provider.Settings;  
import android.text.Selection;
import android.text.Spannable;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;  
import android.widget.Toast;
public class NFCActivity extends BaseMethodWebActivity {  
private static final DateFormat TIME_FORMAT = SimpleDateFormat  
.getDateTimeInstance();  
private NfcAdapter mAdapter;  
private PendingIntent mPendingIntent;  
private NdefMessage mNdefPushMessage;  
private Tag intenTag;
private String NdefRecordTypeByte01 = "http://";
private String NdefRecordTypeByte02 = "www.baidu.com";
private String NdefRecordTypeByte03 = "?";
private int NFCDataType = 0;
private final int MifareClassicType = 1,MifareUltralightType = 2,OtherType = 3;
//扇位置
private short sectorAddress = 6;
//修改密码
private byte[] myKeyA = {'h','9','^','a','-','8'}; 
private int NFCBarCodeLength = 16*3;
public EditText NFCEditText = null;

@Override  
protected void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
resolveIntent(getIntent());  
// 获取默认的NFC控制器  
mAdapter = NfcAdapter.getDefaultAdapter(this);  
//拦截系统级的NFC扫描,例如扫描蓝牙  
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,  
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);  
mNdefPushMessage = new NdefMessage(new NdefRecord[] { newTextRecord("",  
Locale.ENGLISH, true) });  
}  

@Override  
protected void onResume() {  
super.onResume();  
if (mAdapter != null) {  
//隐式启动  
mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);  
mAdapter.enableForegroundNdefPush(this, mNdefPushMessage);  
}  
}  

@Override  
protected void onPause() {  
super.onPause();  
if (mAdapter != null) {  
//隐式启动  
mAdapter.disableForegroundDispatch(this);  
mAdapter.disableForegroundNdefPush(this);  
}  
}  

/**
* 验证扇sector的密码. 
* @param mfc
* @param sector
* @return
*/
private Boolean isKeyMifareClassicEnable(MifareClassic mfc,int sectorIndex){
boolean auth = false;  
try {
auth = mfc.authenticateSectorWithKeyA(sectorIndex,  
MifareClassic.KEY_DEFAULT);
if(!auth){
auth = mfc.authenticateSectorWithKeyA(sectorIndex,  
myKeyA); 
}
if(!auth){
auth = mfc.authenticateSectorWithKeyA(sectorIndex,  
MifareClassic.KEY_NFC_FORUM); 
}
} catch (IOException e) {
Log.e(TAG, "IOException while authenticateSectorWithKey MifareClassic...", e);
}
return auth;
}

/**
* 将数据写入扇,扇中每块必须16位
* @param mfc
* @param barCodeByte
* @param sectorIndex
* @return
*/
private Boolean writeMifareClassicBarCode(MifareClassic mfc,byte[] barCodeByte,int sectorIndex){
Boolean flag = false;
int bCount = mfc.getBlockCountInSector(sectorIndex);
//获取block起始编号
int bIndex = mfc.sectorToBlock(sectorIndex);
int barIndexCount  = barCodeByte.length/16 +1;
for(int i=0;i<bCount - 1 && i < barIndexCount;i++){
byte[] bar = new byte[16];
if(barCodeByte.length >= 0){
for(int j = 0;j < 16;j++){
if(j+i*16 < barCodeByte.length){
bar[j] = barCodeByte[j+i*16];
}else{
bar[j] = 0;
}
}
}
try {
mfc.writeBlock(bIndex, bar);
bIndex++;
if(i == bIndex - 2){
flag = true;
}
} catch (IOException e) {
Log.e(TAG, "IOException while writeMifareClassicBarCode MifareClassic...", e);
}
}
return flag;
}

/**
* 写入数据的方法
* @param barCode
* @param otherStr
*/
protected void WriteMothed(String barCode,String otherStr){
byte[] data = null;
if(otherStr !=null){
data = otherStr.getBytes(Charset.forName("UTF-8"));
}
if(barCode == null || barCode.length() < 4 || barCode.getBytes().length > NFCBarCodeLength){
showToastMessage("要写入的数据不正确!");
return ;
}
if(data.length > DataValues.NFCWriteLength){
showToastMessage("非条码数据不超过"+DataValues.NFCWriteLength+"!");
return ;
}
if (intenTag != null) {  
switch (NFCDataType) {
case MifareClassicType:
//MifareClassicl类型写入
MifareClassic mfc = MifareClassic.get(intenTag);  
int otherStrIndex = 0;
try {  
int bAllCount = 0;
if(barCode != null){
bAllCount = 1;
}
if(data != null){
bAllCount += data.length/16 + 1;
}
for(int j = sectorAddress;j < 16 && j < bAllCount+sectorAddress;j++){
//在删去1 块4、5 写入数据
mfc.connect();  
boolean auth = false;  
byte[] KeyValue = null;
if (isKeyMifareClassicEnable(mfc,j)) { 
KeyValue = mfc.readBlock(4*j+3);
}
mfc.close();
mfc.connect();  
if (isKeyMifareClassicEnable(mfc,j) && KeyValue != null) {  
if(j == sectorAddress){
writeMifareClassicBarCode(mfc,barCode.getBytes(Charset.forName("UTF-8")),j);
}else{
int count = 16*3;
byte[] strByte = new byte[count];
for(int z = 0;z < count;z++){
if(otherStrIndex < data.length){
strByte[z] = data[otherStrIndex];
otherStrIndex++;
}else{
break;
}
}
writeMifareClassicBarCode(mfc, strByte, j);
}
//修改键值,keyA存放在每扇最后一块
for(int i = 0;i<6;i++){
KeyValue[i] = myKeyA[i];
}
mfc.writeBlock(4*j+3, KeyValue);
showToastMessage("写入数据成功!");
mfc.close();  
}else{
showToastMessage("块密码不正确!");  
}
}
} catch (Exception e) {  
showToastMessage("写入数据失败!"); 
Log.e(TAG, "IOException while write MifareClassic...", e);
} finally {  
try {  
mfc.close();  
} catch (IOException e) {  
Log.e(TAG, "IOException while closing MifareClassic...", e); 
}  

break;
case MifareUltralightType:
MifareUltralight ultralight = MifareUltralight.get(intenTag);
try {
ultralight.connect();
//每页4个字符2个汉字,共16页
ultralight.writePage(4, "abcd".getBytes(Charset.forName("US-ASCII")));
ultralight.writePage(5, "efgh".getBytes(Charset.forName("US-ASCII")));
ultralight.writePage(6, "ijkl".getBytes(Charset.forName("US-ASCII")));
ultralight.writePage(7, "mnop".getBytes(Charset.forName("US-ASCII")));
showToastMessage("写入数据成功!");
} catch (Exception e) {
showToastMessage("写入数据失败!");
Log.e(TAG, "IOException while write MifareUltralight...", e);
} finally {
try {
ultralight.close();
} catch (IOException e) {
Log.e(TAG, "IOException while closing MifareUltralight...", e);
}
}
break;
case OtherType:
//新建NdefRecord数组,本例中数组只有一个元素  
NdefRecord re = null;
try{
re = createRecord(otherStr+barCode); 
}catch (Exception e) {
showToastMessage("新建NdefRecord数组失败!");
Log.e(TAG, "IOException while create other NdefRecord...", e);
return;
}
NdefRecord[] records = {re};
//新建一个NdefMessage实例  
NdefMessage message = new NdefMessage(records);  
// 解析TAG获取到NDEF实例  
Ndef ndef = Ndef.get(intenTag);  
if(ndef != null ){
// 打开连接  
try {
ndef.connect();
ndef.writeNdefMessage(message);
showToastMessage("写入数据成功!"); 
} catch (Exception e) {
showToastMessage("写入数据失败!");
Log.e(TAG, "IOException while write other...", e);
} finally{
try {  
ndef.close(); 
} catch (Exception e) {  
Log.e(TAG, "IOException while closing other...", e);  


}
break;
}
} else {  
showToastMessage("设备与nfc卡连接断开,请重新连接...");  

}

/**
* 创建NdefRecord实例 
* @param str
* @return
* @throws UnsupportedEncodingException
*/
protected NdefRecord createRecord( String str ) throws UnsupportedEncodingException {  
NdefRecord textRecord = NdefRecord.createMime(NdefRecordTypeByte01+
NdefRecordTypeByte02+
NdefRecordTypeByte03,
str.getBytes(Charset.forName("US-ASCII")));
// //组装字符串,准备好你要写入的信息  
// String msg = str;  
// //将字符串转换成字节数组  
// byte[] textBytes = msg.getBytes();  
// //将字节数组封装到一个NdefRecord实例中去  
// NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,  
// NdefRecordTypeByte.getBytes(), new byte[] {}, textBytes);
return textRecord;  



private NdefRecord newTextRecord(String text, Locale locale,  
boolean encodeInUtf8) {  
byte[] langBytes = locale.getLanguage().getBytes(  
Charset.forName("UTF-8"));  
Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset  
.forName("UTF-16");  
byte[] textBytes = text.getBytes(utfEncoding);  
int utfBit = encodeInUtf8 ? 0 : (1 << 7);  
char status = (char) (utfBit + langBytes.length);  
byte[] data = new byte[1 + langBytes.length + textBytes.length];  
data[0] = (byte) status;  
System.arraycopy(langBytes, 0, data, 1, langBytes.length);  
System.arraycopy(textBytes, 0, data, 1 + langBytes.length,  
textBytes.length);  
return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT,  
new byte[0], data);  
}   

/**
* 初步判断是什么类型NFC卡  
* @param intent
*/
private void resolveIntent(Intent intent) {  
String action = intent.getAction();  
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)  
|| NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)  
|| NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {  
Parcelable[] rawMsgs = intent  
.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);  
NdefMessage[] msgs;  
intenTag = intent  
.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (rawMsgs != null) {  
msgs = new NdefMessage[rawMsgs.length];  
for (int i = 0; i < rawMsgs.length; i++) {  
msgs[i] = (NdefMessage) rawMsgs[i];  
}  
} else {  
// Unknown tag type  
byte[] empty = new byte[0];  
byte[] id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);  
byte[] payload = dumpTagData(intenTag).getBytes();  
NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN,  
empty, id, payload);  
NdefMessage msg = new NdefMessage(new NdefRecord[] { record });  
msgs = new NdefMessage[] { msg };  
}  
// Setup the views  
getNFCData(msgs);  
}  
}  

/**
* 解析读取的数据
* @param p
* @return
*/
private String dumpTagData(Parcelable p) {  
StringBuilder sb = new StringBuilder();  
Tag tag = (Tag) p;  
// String prefix = "android.nfc.tech.";  
// sb.append("Technologies: ");  
// for (String tech : tag.getTechList()) {  
// sb.append(tech.substring(prefix.length()));  
// sb.append(", ");  
// }  
NFCDataType = 3;
// sb.delete(sb.length() - 2, sb.length());  
for (String tech : tag.getTechList()) {  
if (tech.equals(MifareClassic.class.getName())) {  
MifareClassic mifareTag = MifareClassic.get(tag);  
String type = "Unknown";  
switch (mifareTag.getType()) {  
case MifareClassic.TYPE_CLASSIC:  
type = "Classic";  
break;  
case MifareClassic.TYPE_PLUS:  
type = "Plus";  
break;  
case MifareClassic.TYPE_PRO:  
type = "Pro";  
break;  
}  
NFCDataType = 1;
try {
//获取 扇sectorAddress 块barCdeBlock 的内容
mifareTag.connect();
int bCount;  
int bIndex;  
if (isKeyMifareClassicEnable(mifareTag,sectorAddress)) {   
// 读取扇区中的块总数
bCount = mifareTag.getBlockCountInSector(sectorAddress);
//获取扇区块的起始编号
bIndex = mifareTag.sectorToBlock(sectorAddress);  
for (int i = 0; i < bCount-1; i++) {  
byte[] data = mifareTag.readBlock(bIndex);  
sb.append(new String(data, Charset.forName("UTF-8")));  
bIndex++;  
}  
} else {  
showToastMessage("验证失败");  
}   
} catch (Exception e) {
showToastMessage("读取数据失败!"); 
Log.e(TAG, "IOException while read MifareClassic...", e);
}finally{
try {
mifareTag.close();
} catch (IOException e) {
Log.e(TAG, "IOException while closing MifareClassic...", e);
}
}  
}  


if (tech.equals(MifareUltralight.class.getName())) {  
sb.append('\n');  
MifareUltralight mifareUlTag = MifareUltralight.get(tag);  
String type = "Unknown";  
switch (mifareUlTag.getType()) {  
case MifareUltralight.TYPE_ULTRALIGHT:  
type = "Ultralight";  
break;  
case MifareUltralight.TYPE_ULTRALIGHT_C:  
type = "Ultralight C";  
break;  
}  
NFCDataType = 2;
sb.append("Mifare Ultralight type: ");  
sb.append(type);  
}  
}  
return sb.toString();  
}  
  

/**
* 取出NFC扫描的数据  
* @param msgs
*/
private void getNFCData(NdefMessage[] msgs) {  
if (msgs == null || msgs.length == 0) {  
return;  
}  
//将字节数组转换成字符串  
String str="";
byte[] data = null;
for(NdefMessage obj:msgs){
NdefRecord record[] = obj.getRecords();
for(NdefRecord recordObj:record){
if(data == null){
data = recordObj.getPayload();
}else{
byte[] oldData = data;
data = new byte[oldData.length + recordObj.getPayload().length];
for(int i = 0;i < oldData.length;i++){
data[i] = oldData[i];
}
for(int i = 0;i<recordObj.getPayload().length;i++){
data[oldData.length +i] = recordObj.getPayload()[i];
}
}
}
}
if(data != null){
str = new String(data, Charset.forName("UTF-8"));
}
//截取部分字符findNumberFrom()方法,并展示
NFCEditTextEvent(PublicMethod.findNumberFrom(str));
}  


/**
* 用NFCEditText展示数据,并触发keyEvent
* @param str
*/
public void NFCEditTextEvent(String str){
if(NFCEditText != null){
if(str != null && str.length() > 3){
NFCEditText.setText(str);
CharSequence text = NFCEditText.getText();
if (text instanceof Spannable) {
Spannable spanText = (Spannable)text;
Selection.setSelection(spanText, text.length());
}
if(NFCEditText.getText().toString().trim().length() > 3){
KeyEvent event = new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_ENTER);
NFCEditText.dispatchKeyEvent(event);
}
}
}
}

@Override  
public boolean dispatchKeyEvent(KeyEvent event) {  
if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){  
/*隐藏软键盘*/  
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
if(inputMethodManager.isActive()){  
inputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);  
}   
return true;  
}  
return super.dispatchKeyEvent(event);  


//获取系统隐式启动的  
@Override  
public void onNewIntent(Intent intent) {  
setIntent(intent);  
resolveIntent(intent);  
}  

}  






代码如下:

1

  <uses-permissionandroid:name="android.permission.NFC"/>


    <uses-feature

        android:name="android.hardware.nfc"

        android:required="true"/>


    <uses-sdk

        android:minSdkVersion="14"

        android:targetSdkVersion="21"/>

2、

<!-- TECH_DISCOVERED类型的nfc -->

            <intent-filter>

                <actionandroid:name="android.nfc.action.TECH_DISCOVERED"/>

            </intent-filter>

            <!-- 后设资源  调用自己建立的文件夹xml中的文件 -->

<meta-data

                android:name="android.nfc.action.TECH_DISCOVERED"

                android:resource="@xml/nfc_tech_filter"/>




3、

<?xmlversion="1.0"encoding="utf-8"?>

<resourcesxmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> 

    <tech-list> 

<tech>android.nfc.tech.IsoDep</tech>  

<tech>android.nfc.tech.NfcA</tech>  

<tech>android.nfc.tech.NfcB</tech>  

<tech>android.nfc.tech.NfcF</tech>  

<tech>android.nfc.tech.NfcV</tech>  

<tech>android.nfc.tech.Ndef</tech>  

<tech>android.nfc.tech.NdefFormatable</tech>

<tech>android.nfc.tech.MifareClassic</tech>

<tech>android.nfc.tech.MifareUltralight</tech> 

    </tech-list> 

</resources>



查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 切莫病急乱投医:企业选择信息化外包指南(2)

    第二个误区:“兽医”不能当“人医”用。笔者有个朋友,去年开始上一个开源的ERP软件。由于开源软件有些功能不是很完善,故需要进行比较多的二次开发。他们一直找不到合适的合作伙 伴。要么是距离太远,要么就是实力不够。后来经过多方面比较,企业还是决定采取就近原则,选择…...

    2024/5/1 13:08:07
  2. 初探ReactJS.NET 开发

    ReactJS通常也被称为"React",是一个刚刚在这场游戏中登场的新手。它由Facebook创建,并在2013年首次发布。Facebook认为React在处理SPA问题上可以成为Angular的替代品,因此如果你认为Angular和React这两种框架是竞争对手,那你的理解就对了。不过,与Angular相比,…...

    2024/4/17 16:23:43
  3. quota -avug报错, Device or resource busy

    出现问题情况如下:当输入quotaon -avug的时候出现 Device or resource busy 的错误提示下面的命令是 quotaon -a,不过我在试验时输入的是quotaon -avug,没关系了quotaon -a quotaon: using /home/aquota.group on /dev/hda7: Device or resource busy quotaon: using /home…...

    2024/4/17 2:46:54
  4. Gerrit+Ldap登陆验证

    目录目录Rerference Sofeware CDSN中即可下载 LDAP搭建 Gerrit搭建 配置文件 常用命令Rerference Sofeware (CDSN中即可下载)Gerrit安装包 gerrit-2.8.warLDAP搭建http://blog.csdn.net/wulinxiangzhu/article/details/77742758Gerrit搭建1 java -jar gerrit-2.8.war init -d…...

    2024/4/20 17:59:12
  5. tomcat启动乱码和中文路径访问不到解决方法

    1.tomcat启动乱码配置修改 conf文件下logging.properties修改 java.util.logging.ConsoleHandler.encoding = GBK2、中文路径访问不到配置修改 conf文件下server.xml修改 修改前: <Connector port="8081" protocol="HTTP/1.1"connectionTimeout="…...

    2024/3/31 8:00:32
  6. 图书馆管理系统的项目总结

    项目由四人小组一起完成。实现了一个以C/C++编写的基于文本存储的小型图书馆管理系统。 此次采用三层体系结构,由表示层输入指令和数据,通过功能层将指令的功能实现,将数据传输到数据层,最后由数据层对原生数据进行操作。 整个系统的业务逻辑对象有三个,按从上到下的顺序分…...

    2024/5/2 4:11:35
  7. Linux学习:rc.sysinit

    下面贴出的是centos6.5 /etc/rc.sysinit文件内容 #!/bin/bash # # /etc/rc.d/rc.sysinit - run once at boot time # # Taken in part from Miquel van Smoorenburgs bcheckrc. #HOSTNAME=$(/bin/hostname)set -mif [ -f /etc/sysconfig/network ]; then. /etc/sysconfig/netwo…...

    2024/4/20 9:21:10
  8. Odoo 堆积木似的软件构建

    七雄争霸秦国一统天下,统一货币度量衡,从此天下统一。。。假设在未来的某天,有一款开源的系统平台能将国内的企业管理软件市场进行统一,规范市场,标准开发,所有系统的集成创建通过市场开放的应用独立安装搭建,这将是一个很有意思的事!odoo是什么鬼?关于odoo这里只做简…...

    2024/4/19 5:10:13
  9. ReactJS学习 相关网站

    React 入门实例教程-阮一峰 http://www.ruanyifeng.com/blog/2015/03/react.html汇智网-React 互动学习http://hubwiz.com/course/552762019964049d1872fc88/博客园相关文章http://zzk.cnblogs.com/s?t=b&w=ReactJS...

    2024/4/17 2:46:54
  10. Java面试题2.0--solr

    欢迎关注《Java面试题2.0》合集发布页,持续更新中!概念:Solr是目前非常受欢迎的基于Apache开源组织下Lucene开发的一个开源高性能的企业级搜索平台。Solr具有高度可靠性、可扩展性、可容错性的特点,提供了分布式索引、索引备份、查询负载均衡、自动故障转移和恢复,以及集中…...

    2024/3/31 21:32:21
  11. JNDI访问LDAP目录服务

    原文地址:http://blog.csdn.net/liumm0000/article/details/7932019命名和目录操作您可以使用JNDI执行以下操作:读取操作和更新命名空间的操作。本节介绍这两个操作:l 查询对象l 列出上下文内容l 添加、覆盖和移除绑定l 重命名对象l …...

    2024/4/17 2:46:36
  12. 【Android】入门案例(三)——HTTP连接MySql数据库实现登录

    目录前言一、准备二、建立连接前言在上文Android入门案例(二)——JDBC连接MySql数据库实现登录中我们已经实现JDBC直连数据库,我在结尾也说过实际开发中一般是Android端访问web后台,由后台程序接受参数去访问数据库,并返回访问结果给Android端,本文我们来实现HTTP方式的登录…...

    2024/4/17 2:47:18
  13. PhotoFiltre Studio X中文版

    PhotoFiltre Studio X是一款非常好用的图像编辑处理软件,软件名称带有X说明是该系列软件的增强版软件,功能更加强大。通过这款软件,你可以轻松的对需要编辑的图像进行基础或者高级调整,从而获得自己需要的图像处理效果,做出各种各样的精美图片特效。这款软件和我们熟悉的p…...

    2024/4/28 13:43:47
  14. 2011.3.19(ULE)

    2011.3.19(ULE)[@more@]ext3data block 内容 ls/catinode block 属性 ls -lsuper block dumpe2fs删除文件时,将对应关系删掉,但data block是不删掉的1.分区fdisk /dev/sda,然后刷新分区表,partprobe同步2.制作文件系统,mkfs.ext33.挂载mount4.vim /etc/fstab 两种方式:…...

    2024/4/27 23:32:51
  15. 一看就懂ReactJS

    现在最热门的前端框架有AngularJS、React、Bootstrap等。自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领略ReactJS的风采吧~~ 章有点长,耐心读完,你会有很大收获哦~ 一、ReactJS简介 React 起源于 Facebook 的内部项目,…...

    2024/4/28 22:13:05
  16. C语言课设汇总

    项目名称:【源码+报告】 1.2048小游戏 2.C语言成绩统计系统 3.C语言课程设计------通讯录 4.KTV点歌系统模拟 5.个人联系人管理系统 6.书店图书销售系统 7.企业员工管理管理系统 8.医院预约系统 9.单项选择题标准考试系统 10.历年C语言课设题 11.图书借还系统 12.图书管理系统…...

    2024/4/28 5:47:13
  17. odoo 开发技术栈,成为高级odoo开发人员的基本技能要求,开发框架

    Odoo 作为一个优秀的开源ERP,也是一个优秀的开发框架。Odoo 为我们开启了一道快速实现需求的门,但要想在这条路上走得稳,走得远,必须不断学习。学习能力当然是第一重要的,我们根据内部培训经验,从技术角度小结了下 Odoo 技术栈。其最重要的特点,就是对 odoo 已有 “业务…...

    2024/4/28 22:14:33
  18. CVE-2020-2021:SAML身份验证机制绕过漏洞通告

    CVE-2020-2021:SAML身份验证机制绕过漏洞通告 360-CERT [三六零CERT](javascript:void(0)😉 今天0x00 漏洞背景 2020年06月30日, 360CERT监测发现Palo Alto官方发布了SAML身份验证机制绕过的风险通告,该漏洞编号为CVE-2020-2021,漏洞等级:高危。 安全声明标记语言(SAML)…...

    2024/4/28 18:14:06
  19. Windows搭建Ldap服务器

    目录目录Rerference Sofeware CSDN中下载即可 安装 配置文件 常用命令 客户端使用 LDIF文件Rerference Sofeware (CSDN中下载即可)LdapServer安装包 openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe Ldap客户端 LdapBrowser LdapAdmin.exe安装一路next到install即…...

    2024/4/30 14:12:50
  20. Odoo13开发教程-搭建网站

    博主在外企IT领域工作多年,有一定的Python和ERP基础,最近偶然机会接触到开源ERP odoo,萌生了学习的念头,但是官网的开发教程都是英文,所以打算用浅显易懂的文字翻译成中文,方便大家一起学习,有翻译不到位的地方还请大家指正 注意:我的Odoo代码是在官方nightly地址下的。…...

    2024/4/28 22:22:36

最新文章

  1. 【QT学习】14.线程学习

    一。线程了解 线程是计算机科学中的一个重要概念&#xff0c;它是操作系统能够进行运算调度的最小单位。线程是进程中的一个执行流&#xff0c;一个进程可以包含多个线程。与进程相比&#xff0c;线程更轻量级&#xff0c;可以更高效地利用计算机资源。 线程有以下几个特点&…...

    2024/5/2 16:00:47
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Unity核心学习

    目录 认识模型的制作流程模型的制作过程 2D相关图片导入设置图片导入概述纹理类型设置纹理形状设置纹理高级设置纹理平铺拉伸设置纹理平台打包相关设置 SpriteSprite Editor——Single图片编辑Sprite Editor——Multiple图片编辑Sprite Editor——Polygon图片编辑SpriteRendere…...

    2024/5/1 13:06:24
  4. C++ //练习 11.14 扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair的vector,保存孩子的名和生日。

    C Primer&#xff08;第5版&#xff09; 练习 11.14 练习 11.14 扩展你在11.2.1节练习&#xff08;第378页&#xff09;中编写的孩子姓到名的map&#xff0c;添加一个pair的vector&#xff0c;保存孩子的名和生日。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#x…...

    2024/5/1 13:00:20
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57