精华内容
下载资源
问答
  • 来福手机销售管理系统是一款专业的手机销售管理软件,其中包含手机进销系统,手机库存管理系统(手机仓库管理系统),财务和报表系统等子模块。其中的手机串号管理功能更是融贯了功能的复杂性和使用的方便性。来福...
  • 这是一套手机壳库存报表excel模版下载,喜欢的人都来下载吧。该文档手机壳库存报表excel模版下载,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 手机进销源码

    2006-02-23 09:05:59
    手机进销源码
  • 管 理 系 统 项目成员: 学号 姓名 完成的工作 12601310211   后台编写 12601310212   数据库设计 12601310215   图片...

    项目成员:

    学号

    姓名

    完成的工作

    12601310211

     

    后台编写

    12601310212

     

    数据库设计

    12601310215

     

    图片模块

    12601310237

     

    GUI界面设计

     

    一、项目的总体介绍

    ² 系统操作简单、便捷,界面美观、友好。

    ² 进销存管理系统的模块的实现:

    l  基础信息管理模块。

    l  进货管理模块。

    l  销售管理模块。

    l  库存管理模块

    l  查询统计模块。

    l  系统管理模块。

     

    二、项目的详细介绍

    1、数据库设计(数据字典)

    (1)客户信息表(tb_khinfo)

    字段名

    数据类型

    大小

    可否为空

    备注

    id

    nvarchar

    50

    no

    客户代码(主键)

    pyCode

    nvarchar

    20

    no

    助记码

    customerName

    nvarchar

    20

    no

    客户简称

    companyName

    nvarchar

    40

    no

    公司名称

    companySite

    nvarchar

    50

    no

    公司地址

    companyPhone

    nvarchar

    20

    no

    公司电话

    linkman

    nvarchar

    15

    no

    联系人

    linkPhone

    nvarchar

    20

    no

    联系电话

    fax

    nvarchar

    20

    yes

    传真

    customerSort

    nvarchar

    15

    no

    客户分类

    customerQuale

    nvarchar

    15

    no

    客户性质

    customerZone

    nvarchar

    15

    no

    客户分区

    address

    nvarchar

    70

    no

    投递地址

    zipCode

    nvarchar

    15

    no

    邮政编码

    bankName

    nvarchar

    30

    no

    开户银行

    bankAccout

    nvarchar

    30

    no

    银行账号

    email

    nvarchar

    50

    yes

    邮箱

    companyHomePage

    nvarchar

    100

    yes

    主页

    remark

    nvarchar

    100

    yes

    备注

    (2)商品信息表(tb_spinfo)

    字段名

    数据类型

    大小

    可否为空

    备注

    id

    nvarchar

    50

    no

    编号(主键)

    spname

    nvarchar

    50

    no

    商品名称

    jc

    nvarchar

    50

    yes

    简称

    cd

    nvarchar

    50

    yes

    产地

    dw

    nvarchar

    10

    no

    单位

    gg

    nvarchar

    20

    no

    规格

    bz

    nvarchar

    50

    yes

    包装

    ph

    nvarchar

    50

    yes

    批号

    pzwh

    nvarchar

    50

    no

    批准文号

    memo

    nvarchar

    90

    yes

    备注

    gysname

    nvarchar

    100

    no

    供应商名称

    (3)供应商信息表(tb_gysinfo)

    字段名

    数据类型

    大小

    可否为空

    备注

    id

    nvarchar

    50

    no

    编号(主键)

    name

    nvarchar

    50

    no

    名称

    jc

    nvarchar

    50

    no

    简称

    address

    nvarchar

    50

    no

    地址

    bianma

    nvarchar

    50

    yes

    邮政编码

    tel

    nvarchar

    50

    yes

    电话

    fax

    nvarchar

    50

    yes

    传真

    lian

    nvarchar

    50

    no

    联系人

    ltel

    nvarchar

    50

    yes

    手机

    yh

    nvarchar

    50

    yes

    银行账户

    mail

    nvarchar

    50

    yes

    E_mail

    (4)用户信息表(tb_userlist)

    字段名

    数据类型

    大小

    可否为空

    备注

    name

    nvarchar

    50

    no

    用户姓名(主键)

    username

    nvarchar

    50

    no

    登录名

    pass

    nvarchar

    50

    no

    密码

    quan

    nvarchar

    2

    no

    权限

    (5)库存信息表(tb_kucun)

    字段名

    数据类型

    大小

    可否为空

    备注

    id

    nvarchar

    30

    no

    编号(主键)

    spname

    nvarchar

    50

    no

    商品名称

    jc

    nvarchar

    25

    yes

    简称

    cd

    nvarchar

    50

    no

    产地

    gg

    nvarchar

    50

    no

    规格

    bz

    nvarchar

    50

    yes

    包装

    dw

    nvarchar

    10

    no

    单位

    dj

    money

     

    no

    单价

    kcsl

    int

     

    no

    库存数量

    (6)入库主表(tb_ruku_detail)

    字段名

    数据类型

    大小

    可否为空

    备注

    rkID

    nvarchar

    30

    no

    编号(主键)

    pzs

    int

     

    no

    总数

    je

    money

     

    no

    金额

    ysjl

    nvarchar

    50

    yes

    原始记录

    gysname

    nvarchar

    100

    no

    商品名

    rkdate

    datetime

     

    no

    日期记录

    czy

    nvarchar

    30

    no

    操作员

    jsr

    nvarchar

    30

    no

    经手人

    jsfs

    nvarchar

    10

    no

    经手方式

    (7)入库详细表(tb_ruku_main)

    字段名

    数据类型

    大小

    可否为空

    备注

    id

    int

     

    no

    编号(主键)

    rkID

    nvarchar

    30

    no

    入库编号

    spid

    nvarchar

    50

    no

    商品编号

    dj

    money

     

    no

    单价

    sl

    int

     

    no

    数量

    (8)销售主表(tb_sell_detail)

    字段名

    数据类型

    大小

    可否为空

    备注

    sellID

    nvarchar

    30

    no

    编号(主键)

    pzs

    int

     

    no

    总数

    je

    money

     

    no

    金额

    ysjl

    nvarchar

    50

    yes

    原始记录

    khname

    nvarchar

    100

    no

    商品名

    xsdate

    datetime

     

    no

    日期记录

    czy

    nvarchar

    30

    no

    操作员

    jsr

    nvarchar

    30

    no

    经手人

    jsfs

    nvarchar

    10

    no

    经手方式

    (9)销售详细表(tb_sell_main)

    字段名

    数据类型

    大小

    可否为空

    备注

    id

    int

     

    no

    编号(主键)

    sellID

    nvarchar

    30

    no

    退货编号

    spid

    nvarchar

    50

    no

    商品编号

    dj

    money

     

    no

    定价

    sl

    int

     

    no

    数量

    (10)入库退货主表(tb_rkth_detail)

    字段名

    数据类型

    大小

    可否为空

    备注

    rkthID

    nvarchar

    30

    no

    退货编号(主键)

    pzs

    int

     

    no

    品种数

    je

    money

     

    no

    金额

    ysjl

    nvarchar

    50

    yes

    原始记录

    gtsname

    nvarchar

    100

    no

    客户商名

    thdate

    datetime

     

    no

    退货时间

    czy

    nvarchar

    30

    no

    操作员

    jsr

    nvarchar

    30

    no

    经手人

    jsfs

    nvarchar

    10

    no

    经手方式

    (11)入库退货详细表(tb_rkth_main)

    字段名

    数据类型

    大小

    可否为空

    备注

    id

    int

     

    no

    编号(主键)

    rkthID

    nvarchar

    30

    no

    退货编号

    spid

    nvarchar

    50

    no

    商品编号

    dj

    money

     

    no

    定价

    sl

    int

     

    no

    数量

    (12)销售退货主表(tb_xsth_detail)

    字段名

    数据类型

    大小

    可否为空

    备注

    xsthID

    nvarchar

    30

    no

    退货编号(主键)

    pzs

    int

     

    no

    总数

    je

    money

     

    no

    金额

    ysjl

    nvarchar

    50

    yes

    原始记录

    khname

    nvarchar

    100

    no

    客户商名

    thdate

    datetime

     

    no

    退货时间

    czy

    nvarchar

    30

    no

    操作员

    jsr

    nvarchar

    30

    no

    经手人

    jsfs

    nvarchar

    10

    no

    经手方式

    (13)销售退货详细表(tb_xsth_main)

    字段名

    数据类型

    大小

    可否为空

    备注

    id

    int

     

    no

    编号(主键)

    xsthID

    nvarchar

    30

    no

    退货编号

    spid

    nvarchar

    50

    no

    商品编号

    dj

    money

     

    no

    定价

    sl

    int

     

    no

    数量

    (14)数据字典(tb_dictionary)

    字段名

    数据类型

    大小

    可否为空

    备注

    id

    int

     

    no

    编号(主键)

    typeCode

    nvarchar

    30

    no

    数据目

    typeName

    nvarchar

    30

    no

    数据目名称

    valueCode

    int

     

    no

    数据项编号

    valueName

    nvarchar

    30

    no

    数据项名称

    lrczy

    nvarchar

    30

    no

    录入

    lrdate

    datetime

     

    yes

    录入时间

    2、模块介绍

     

    3、项目效果图

    (1)登陆模块

    (2)主界面模块

    (3)客户信息管理——添加

    (4)客户信息管理——修改与删除

    (5)商品信息管理——添加

    (6)商品信息管理——修改与删除

    (7)供应商信息管理——添加

    (8)供应商信息管理——修改与删除

    (9)进货管理——进货单

    (10)进货管理——入库退货(进货退货)

    (11)销售管理——销售单

    (12)销售管理——销售退货

    (13)库存管理——库存盘点

    (14)库存管理——价格调整

    (15)查询统计——客户信息查询

    (14)查询统计——商品信息查询

    (15)查询统计——供应商信息查询

    (16)查询统计——销售信息查询

    (17)查询统计——销售退货查询

    (18)查询统计——商品入库查询

    (19)查询统计——商品入库退货查询

    (20)查询统计——销售排行

    (21)查询统计——字典查询

    (22)系统管理——操作员管理

    (22)系统管理——权限管理

    (23)系统管理——字典管理

    (24)系统管理——更改密码

    (25)系统管理——退出系统

     

    三、项目总结

    进销存管理系统总结

    进销存管理系统开发为期2个月,基本功能都已经完全实现。

    本系统分为登录模块、基础信息管理、进货管理、销售管理、库存管理、查询统计、系统管理等7个模块。

    在开发进销存管理系统中,出现许多问题,但能通过他人的帮助与寻找相关资料突破问题,在开发中,学到许多非常有用的东西。

    还存在不少问题,以其他权限登录功能还没有实现。

    未来增添功能,增添打印报表功能,数据库备份功能,客户可在网络中进行进货。

    自评意见

    我们所做的系统能满足物存管理的日常需求。

    我所负责的模块,实现过程相当复杂,花费了大量的时间,做出了相当精美的进销存管理系统。

     

    签名:   

    2013年6月28日

    自评等级

    优秀

    图片都在doc文档当中

     http://download.csdn.net/detail/jianxuanbing/6742279

    展开全文
  • 第 PAGE 页码 页码 页 / 总页数 NUMPAGES 总页数 总页数 页 你的手机掉了尚红阅读试题及答案 导读我根据大家的需要整理了一份关于你的手机掉了尚红阅读试题及答案的内容具体内容女人把手机掏出来放在杨洋的手里...
  • * *
  • 学习文档上传

    2010-05-21 16:18:22
    学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,学习文档上传,
  • 扫描二维码存手机

    千次阅读 2015-04-23 19:23:26
    二维码的开发有好多种,但一般都有开源的框架,本文就用的是ZXing类库修剪之后编写的,我会后面附上我的源代码。 首先是Mainactivity.java package com.qrcode; import com.google.zxing.WriterException; ...

    二维码的开发有好多种,但一般都有开源的框架,本文就用的是在ZXing类库上修剪之后编写的,我会在后面附上我的源代码。

    首先是Mainactivity.java

    <p>package com.qrcode;</p><p>
    import com.google.zxing.WriterException;
    import com.zxing.activity.CaptureActivity;
    import com.zxing.encoding.EncodingHandler;</p><p>import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;</p><p>public class MainActivity extends Activity {</p><p> 
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
       
            Button scanBarCodeButton  = (Button) this.findViewById(R.id.bt_scann);
            Button generateQRCodeButton= (Button) this.findViewById(R.id.bt_save);
            scanBarCodeButton.setOnClickListener(new OnClickListener() {
       
       @Override
       public void onClick(View v) {
         
        Intent openCameraIntent = new Intent(MainActivity.this,save.class);
        startActivity(openCameraIntent);
       }
      });
            
            
            generateQRCodeButton.setOnClickListener(new OnClickListener() {
       
       @Override
       public void onClick(View v) {
        Intent openCameraIntent = new Intent(MainActivity.this,scan.class);
        startActivity(openCameraIntent);
       }
      });
        }</p><p>
     
    }</p>

    这是主界面,有两个按钮,scanBarCodeButton进入创建二维码的界面,generateQRCodeButton进入扫描界面。

    以下是生成二维码界面的类save.java

    package com.qrcode;
    
    import com.google.zxing.WriterException;
    import com.zxing.activity.CaptureActivity;
    import com.zxing.encoding.EncodingHandler;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class save extends Activity {
    	
    	private EditText qrStrEditText;
    	private ImageView qrImgImageView;
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.save);
            
           
            qrStrEditText = (EditText) this.findViewById(R.id.et_qr_string);
            qrImgImageView = (ImageView) this.findViewById(R.id.iv_qr_image);
            
            Button scanBarCodeButton = (Button) this.findViewById(R.id.bt_creat);
            scanBarCodeButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    					
    				try {
    					String contentString = qrStrEditText.getText().toString();
    					if (!contentString.equals("")) {
    						
    						Bitmap qrCodeBitmap = EncodingHandler.createQRCode(contentString, 350);
    						qrImgImageView.setImageBitmap(qrCodeBitmap);
    					}else {
    						Toast.makeText(save.this, "Text can not be empty", Toast.LENGTH_SHORT).show();
    					}
    					
    				} catch (WriterException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		});
            
            Button generateQRCodeButton = (Button) this.findViewById(R.id.bt_saveewm);
             generateQRCodeButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				
    			}
    		});
        }
    
    	
    }


    EncodingHandler.createQRCode(a,b) a是要转成二维码的字符串,b是转成二维码的大小。

    接下来是扫描页类scan.java

    package com.qrcode;
    
    import com.google.zxing.WriterException;
    import com.zxing.activity.CaptureActivity;
    import com.zxing.encoding.EncodingHandler;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class scan extends Activity {
    	private TextView resultTextView;
    	Context context;
    	String scanResult;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.scan);
            context = this;
            resultTextView = (TextView) this.findViewById(R.id.sanresult);
    
            Button scanBarCodeButton = (Button) this.findViewById(R.id.bt_scan);
            Button btadd=(Button) findViewById(R.id.bt_add);
            
            scanBarCodeButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    					
    				Intent openCameraIntent = new Intent(scan.this,CaptureActivity.class);
    				startActivityForResult(openCameraIntent, 0);
    			}
    		});
            btadd.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				String[] strs = scanResult.split(" ");
    				ContectTest text=new ContectTest();
    				try {
    					text.testInsert(context, strs[0], strs[1]);
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		});
            
        }
    
    	@Override
    	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    		super.onActivityResult(requestCode, resultCode, data);
    	
    		if (resultCode == RESULT_OK) {
    			Bundle bundle = data.getExtras();
    			scanResult = bundle.getString("result");
    			resultTextView.setText(scanResult);
    		}
    	}
    	
    }


    scanBarCodeButton按钮是进入ZXing类库里的CaptureActivity.java扫描页面,之后把扫描的结果反回onActivityResult()函数的scanResult。

    btadd按钮是把扫描的信息存到电话录里,这里用到了contentprovider组件,联系手机上的通讯录数据库,把电话号码加进去。用到了ContectTest.java代码如下

    package com.qrcode;
    
    
    import java.util.ArrayList;
    
    import android.content.ContentProviderOperation;
    import android.content.ContentProviderResult;
    import android.content.ContentResolver;
    import android.content.ContentUris;
    import android.content.ContentValues;
    import android.content.Context;
    import android.content.OperationApplicationException;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.RemoteException;
    import android.provider.ContactsContract;
    import android.provider.ContactsContract.Data;
    import android.provider.ContactsContract.RawContacts;
    import android.provider.ContactsContract.CommonDataKinds.Email;
    import android.provider.ContactsContract.CommonDataKinds.Phone;
    import android.provider.ContactsContract.CommonDataKinds.StructuredName;
    import android.test.AndroidTestCase;
    import android.util.Log;
    
    public class ContectTest extends AndroidTestCase{
        private static final String TAG = "ContactTest";
        
        /**
         * 获取通讯录中联系人
         */
        public void testGetContact(){
            ContentResolver contentResolver = this.getContext().getContentResolver();
            Uri uri = Uri.parse("content://com.android.contacts/contacts");
            Cursor cursor = contentResolver.query(uri, null, null, null, null);
            while(cursor.moveToNext()){
                // 获取联系人姓名
                StringBuilder sb = new StringBuilder();
                String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));  
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
                sb.append("contactId=").append(contactId).append(",name=").append(name);
                
                //获取联系人手机号码
                Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,  
                        null,  
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,  
                        null, null);  
                while(phones.moveToNext()){
                    String phone = phones.getString(phones.getColumnIndex("data1")); 
                    sb.append(",phone=").append(phone);
                }
                
                //获取联系人email
                Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,  
                           null,  
                           ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,  
                           null, null); 
                while(emails.moveToNext()){
                    String email = emails.getString(emails.getColumnIndex("data1")); 
                    sb.append(",email=").append(email);
                }
                Log.i(TAG, sb.toString());
            }
        }
    
        /**
         * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId 
         * 
         * 这是后面插入data表的数据,只有执行空值插入,才能使插入的联系人在通讯录里可见
         */
      
        	public void testInsert(Context context, String name, String phone) {
        		ContentResolver resolver = context.getContentResolver();
        		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        		ContentValues values = new ContentValues();
        		// 鍚憆aw_contacts鎻掑叆涓�潯闄や簡ID涔嬪, 鍏朵粬鍏ㄩ儴涓篘ULL鐨勮褰� ID鏄嚜鍔ㄧ敓鎴愮殑
        		long id = ContentUris.parseId(resolver.insert(uri, values));
        		// 娣诲姞鑱旂郴浜哄鍚�
        		uri = Uri.parse("content://com.android.contacts/data");
        		values.put("raw_contact_id", id);
        		values.put("data2", name);
        		values.put("mimetype", "vnd.android.cursor.item/name");
        		resolver.insert(uri, values);
        		// 娣诲姞鑱旂郴浜虹數璇�
        		values.clear(); // 娓呯┖涓婃鐨勬暟鎹�
        		values.put("raw_contact_id", id);
        		values.put("data1", phone);
        		values.put("data2", "2");
        		values.put("mimetype", "vnd.android.cursor.item/phone_v2");
        		resolver.insert(uri, values);
        	}
     
        
        /**
         * 批量添加联系人,处于同一个事务中
         */
        public void testSave() throws Throwable{
            //文档位置:reference\android\provider\ContactsContract.RawContacts.html
            ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
            int rawContactInsertIndex = 0;
            ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
                    .withValue(RawContacts.ACCOUNT_TYPE, null)
                    .withValue(RawContacts.ACCOUNT_NAME, null)
                    .build());
            
            //文档位置:reference\android\provider\ContactsContract.Data.html
            ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
                    .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
                    .withValue(StructuredName.GIVEN_NAME, "lisi")
                    .build());
            ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
                     .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
                     .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
                     .withValue(Phone.NUMBER, "5556")
                     .withValue(Phone.TYPE, Phone.TYPE_MOBILE)
                     .withValue(Phone.LABEL, "")
                     .build());
            ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
                     .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
                     .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
                     .withValue(Email.DATA, "lisi@126.cn")
                     .withValue(Email.TYPE, Email.TYPE_WORK)
                     .build());
            
            ContentProviderResult[] results = this.getContext()
                    .getContentResolver().applyBatch(ContactsContract.AUTHORITY,ops);
            for (ContentProviderResult result : results) {
                Log.i(TAG, result.uri.toString());
            }
        }
        
    }


    ContectTest类里有多个方法,有读取,有插入等等,但这里我们只用到testInsert()函数。

    这就是大体代码,源代码会附上。
    好像不能上传源代码

    展开全文
  • android 获取手机存储信息详解(内存,外等)  android不像ios,android可以外接Sd卡,并且也会有内接的存储卡,此次专门研究下如何获取android的存储信息。   一、RAM内存  RAM,也就是我们常说的手机内存。...
            android  获取手机存储信息详解(内存,外存等)

            android不像ios,android可以外接Sd卡,并且也会有内接的存储卡,此次专门研究下如何获取android的存储信息。
       
    一、RAM内存
            RAM,也就是我们常说的手机内存。最早的内存大小才80M,而现在一般内存大小已经达到1G,近年来2G内存已经成为主流,也有一些手机是3.5G与4G、8G等大小。一般来说内存越大,运行起来更流程,起码我自己的手机才1G==早就想换个大点的了……… 言归正传,此时我们来获取android的内存大小。
            在android手机中,存在文件路径"/proc/meminfo“  此为系统内存信息文件,第一行就是内存大小
            我们可以通过adb工具链接手机,打开调试模式,之后采用命令”adb pull /proc/meminfo "将其导出,用文本格式打开里面内容。
            
            所有可以通过该方式获取总内存(关键代码):
           
     final String mem_path = "/proc/meminfo";// 系统内存信息文件,第一行为内存大小
            Reader reader = null;
            BufferedReader bufferedReader = null;
            
            reader = new FileReader(mem_path);
            bufferedReader = new BufferedReader(reader, 8192);
            long totalRAMSize = Long.parseLong(bufferedReader.readLine().split("\\s+")[1]) * 1024L;//这里*1024是转换为单位B(字节)

            
            而获取内存可用大小有两种方式,一是和上面一个有个MemFree的参数,显示可用大小……而另一种方式则是直接使用android自带的类,获取当前的可用内存大小。
           第一种方式和获取总内存大小一样,我就不写了,第二种方式(关键代码):
            
           
     <span style="white-space:pre">	</span>ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); //该接口可用获取很多设备信息,这里就不详叙了==
            ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
            am.getMemoryInfo(memInfo);
            long  availRAMsize = memInfo.availMem;

       
            至此,我们已经获取到了手机内存总大小与可用内存大小

    二、ROM内部存储
           ROM,RAM ==之前一直傻傻分不清楚。后来稍加记忆,ROM里面的‘o’就是only 的意思,我就是理解为仅仅作为存储所用,所以是内部存储而不是内存==当然换个通俗易懂的方式,如果手机和电脑来比较的话,手机内存RAM,就是电脑的内存;手机内部存储ROM就是电脑的C盘,而手机的SD卡内置存储卡就对应电脑的D/E/F……盘 
            再次回归主题,要获取内部存储信息大小,可以通过android自带的类StatFs获取磁盘的信息。
           
     <span style="white-space:pre">	</span>final StatFs statFs = new StatFs(Environment.getDataDirectory().getPath());//调用该类来获取磁盘信息(而getDataDirectory就是内部存储)
            long tcounts = statFs.getBlockCount();//总共的block数
            long counts = statFs.getAvailableBlocks() ; //获取可用的block数
            long size = statFs.getBlockSize(); //每格所占的大小,一般是4KB==
            long availROMSize = counts * size;//可用内部存储大小
            long totalROMSize = tcounts *size; //内部存储总大小

           上面方法原理显而易见了==我就懒得说了……下面的才是重头戏

    三、外置存储信息
           所谓举一反三,上面获取ROM内部存储信息的时候,已经用到了获取磁盘信息类StatFs,当然存储卡都算是磁盘的一种啦,我不信android里面设置这个类没有考虑到外置存储卡!
            果然,同意可以通过StatFs方式获取:
            
            final StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getPath());//调用该类来获取磁盘信息(而getExternalStorageDirectory就是外置存储)
            long tcounts = statFs.getBlockCount();//总共的block数
            long counts = statFs.getAvailableBlocks() ; //获取可用的block数
            long size = statFs.getBlockSize(); //每格所占的大小,一般是4KB==
            long availROMSize = counts * size;//可用内部存储大小
            long totalROMSize = tcounts *size; //内部存储总大小


            ……是的,我是无耻的复制粘贴了ROM里面的==|||
            当然修改一个磁盘地址getExternalStorageDirectory(看命名就知道了--一个是getDataDirectory,内部存储,一个是getExternalStorageDirectory,额外的存储目录……)
            当初以为到这里,大功告成…………然而,我还是太年轻
            写好代码之后,用自己烂烂的VIVO进行测试,插的是8G的卡发现,没有任何问题,再找了一台机器测试,16G的卡发现,显示的是4G……看清楚--是4G。。。。
            ……MADAN。。。这是什么东西,我手机存储卡明明是16G,结果显示4G……
            继续探究,观察源码打印Environment.getExternalStorageDirectory().getPath()地址,发现出来的是scard0,--自己看手机的存储卡地址,scard1,,,原来 android的官方文档上说,采用Enviroment.getExternalStorageDirectory()方法可以得到android设备的外置存储(即外插SDCARD),如果android设备有外插SDCARD的话就返回外插SDCARD的根目录路径,如果android设备没有外插SDCARD的话就返回android设备的内置SDCARD的路径。这套方案很快就被否决了,因为Enviroment类的这个方法里面的路径也是写死的,只有原生的android系统才使用这套方案,被更改过的anroid体统很多设备的路径都改了。
           除此之外,调用Environment.getExternalStorageDirectory(),返回的存储目录并不是系统内置的SD卡目录。
    1.一部分手机将eMMC存储挂载到 /mnt/external_sd 、/mnt/sdcard2 等节点,而将外置的SD卡挂载到Environment.getExternalStorageDirectory()这个结点。
    此时,调用Environment.getExternalStorageDirectory(),则返回外置的SD的路径。
    2.而另一部分手机直接将eMMC存储挂载在Environment.getExternalStorageDirectory()这个节点,而将真正的外置SD卡挂载到/mnt/external_sd、/mnt/sdcard2 等节点。
            
    …………………………这样这个方法就不科学了啊…………好在,还是有其他方法,通过 读取system/etc/vold.fstab文件的内容来获取存储设备路径
    获取外置信息

    1)先反射调用函数获取所有外载地址
    2 ) 通过/system/etc/vold.fstab获取地址
    3)通过getEnterStorage获取地址
    4)所有地址进行汇总然后获取总大小和可用大小 命名取最后
    源码明天补--
    附: android常见的SD卡存储位置
    /storage/emulated/0/
    /storage/extSdCard
    /mnt/external_sd/
    /mnt/sdcard2/
    /mnt/sdcard/external_sd/
    /mnt/sdcard-ext/
    /mnt/sdcard/
    /storage/sdcard0/
    /mnt/extSdCard/
    /mnt/extsd/
    /mnt/emmc/
    /mnt/extern_sd/
    /mnt/ext_sd/
    /mnt/ext_card/
    /mnt/_ExternalSD/
    /sdcard2/
    /sdcard/
    /sdcard/sd/
    /sdcard/external_sd/
    /mnt/sd/
    /mnt/
    /storage/
    /mnt/sdcard/sd/
    /mnt/exsdcard/
    /mnt/sdcard/extStorages/SdCard/
    /ext_card/
    /storage/extSdCard
    


    展开全文
  • CRMEB接口文档

    千次阅读 2019-09-29 09:01:11
    CRMEBv3.0采用TP6框架,前后端完全分离...一下是部分接口文档,全部接口文档还得联系官方 地址:http://github.crmeb.net/u/lingting crmeb crmeb api 公共信息 CRMEB API接口说明 公共接口 活动状态 基本信息...

    CRMEBv3.0采用TP6框架,前后端完全分离了,这样以来,微信公众号、微信小程序、H5都是调用统一接口,接下来还会出百度小程序、抖音小程序等,就变得更加方便了。
    一下是部分接口文档,全部接口文档还得联系官方
    地址:http://github.crmeb.net/u/lingting

    crmeb

    crmeb api

    公共信息

    CRMEB API接口说明

    公共接口

    活动状态

    基本信息

    Path: /api/user/activity

    Method: GET

    接口描述:

    请求参数

    返回数据

    名称类型是否必须默认值备注其他信息
    statusnumber必须
    msgstring必须
    dataobject非必须
    ├─ is_barginboolean非必须砍价活动是否开启|true=开启,false=关闭
    ├─ is_pinkboolean非必须拼团活动是否开启|true=开启,false=关闭
    ├─ is_seckillboolean非必须秒杀活动是否开启|true=开启,false=关闭

    为你推荐

    基本信息

    Path: /api/product/hot

    Method: GET

    接口描述:

    请求参数

    Headers

    参数名称参数值是否必须示例备注
    Content-Typeapplication/json

    Query

    参数名称是否必须示例备注
    page1分页参数起始值
    limit20分页数步长值

    Body

    名称类型是否必须默认值备注其他信息
    pagenumber必须分页数起始值
    limitnumber必须分页数步长值

    返回数据

    名称类型是否必须默认值备注其他信息
    statusnumber必须
    msgstring必须
    dataobject []非必须

    item 类型: object

    ├─ idinteger非必须商品编号
    ├─ imagestring非必须商品图片
    ├─ store_namestring非必须商品名称
    ├─ cate_idinteger非必须商品分类编号!
    ├─ pricestring非必须商品价格
    ├─ unit_namestring非必须商品单位!
    ├─ sortnumber非必须商品排序!

    分享配置

    基本信息

    Path: /api/share

    Method: GET

    接口描述:

    请求参数

    返回数据

    名称类型是否必须默认值备注其他信息
    statusnumber必须
    msgstring必须
    dataobject非必须
    ├─ dataobject非必须
    ├─ imgstring非必须分享图片
    ├─ titlestring非必须分享标题
    ├─ synopsisstring非必须分享简介

    切换H5登陆

    基本信息

    Path: /api/switch_h5

    Method: POST

    接口描述:

    请求参数

    Headers

    参数名称参数值是否必须示例备注
    Content-Typeapplication/x-www-form-urlencoded

    Query

    参数名称是否必须示例备注
    fromroutinewechat=公众号,routine=小程序

    返回数据

    名称类型是否必须默认值备注其他信息

    商品列表

    基本信息

    Path: /api/products

    Method: GET

    接口描述:

    请求参数

    Query

    参数名称是否必须示例备注
    sid二级分类编号
    cid一级分类编号(!)
    keyword搜索
    priceOrder价格排序
    salesOrder销量排序
    news是否新品
    page分页参数起始值
    limit分页数步长值

    返回数据

    名称类型是否必须默认值备注其他信息
    statusinteger必须
    msgstring必须
    dataobject []非必须

    item 类型: object

    ├─ idinteger非必须商品编号
    ├─ store_namestring非必须商品名称
    ├─ cate_idstring非必须商品分类编号
    ├─ imagestring非必须商品图片
    ├─ salesstring非必须商品销量
    ├─ pricestring非必须商品价格
    ├─ stocknumber非必须商品库存

    手机号修改密码

    基本信息

    Path: /api/register/reset

    Method: POST

    接口描述:

    请求参数

    Headers

    参数名称参数值是否必须示例备注
    Content-Typeapplication/json

    Body

    名称类型是否必须默认值备注其他信息
    accountstring必须手机号/账号
    captchastring必须验证码
    passwordstring必须新密码

    返回数据

    名称类型是否必须默认值备注其他信息
    statusnumber必须
    msgstring必须
    展开全文
  • 论坛帮助文档

    万次阅读 多人点赞 2019-12-11 10:32:26
    对于论坛用户之间相识、交往中所发生或可能发生的任何心理、身体的伤害和经济的损失与纠纷,由相关用户自行承担一切法律责任,CSDN经营者不承担任何法律责任。 第2条 本准则如存在与国家法律、法规或司法解释...
  • 使用 Minion 您的手机或平板电脑轻松控制您的爆米花时间客户端。 本自述文件是与 Minion 项目合作(或参与)的每个人的主要文档来源。 如果您认为您发现了错误、遇到了问题或有可以帮助项目的想法,请发布...
  • ExMobi文档

    千次阅读 2015-07-04 11:25:43
    EXmobi官方文档 ExMobi®从入门到精通         本书电子版和示例代码请访问GIT仓库: https://github.com/nandy007/ExMobiBeginnerBook       ExMobi门户:http://www.exmobi.cn ExMobi...
  • 操作系统复习文档

    千次阅读 多人点赞 2018-01-02 13:09:19
    手机上应该安装哪一类? 4、若按系统处理任务的方式来划分,则OS可分为哪几类? 5、OS提供的用户界面有哪几类?对应的一个实例分别是什么? 6、不同时期的软件开发方法决定了OS的结构,UNIX和Windows的结构分别是...
  • 企业号开发者接口文档

    千次阅读 2017-09-19 17:18:47
    转载自:... 开发者论坛 ...接口文档 进入官网 微信JS-SDK接口 微信JS-SDK说明文档
  • Freemarker官网,英文,可以用谷歌浏览器的自动翻译,英文水平高的忽略这句。。 简单来说:FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具...这里使用freemarker生成Word文档,非常方便。 惯例,先看看
  • 石墨文档是一款轻便好用的在线协作文档工具,支持多人同时在线编辑文档与文件,在线文档即写即,是远程协作办公的好帮手。但是有的小伙伴想要使用石墨文档与同事一起协作办公时,却遇到了没有访问权限的问题,...
  • 官方文档原文地址应用程序原理Android应用程序是通过Java编程语言来写。Android软件开发工具把你的代码...一旦安装到设备,每个Android应用程序就运行各自独立的安全沙盒中: Android系统是一个多用户的Linux系统,
  • 阿里妹导读:OCR作为智能审核的重要环节,其识别准确率影响着最终审核效果的好坏,而来自扫描仪、智能手机文档图像多存在卷曲、折叠。本文旨在利用深度学习算法对文档图像的形变...
  • DolphinScheduler使用文档

    万次阅读 2020-03-10 11:37:24
    工作流任务调度系统:Apache DolphinScheduler ...一、文档说明 1.1 DolphinScheduler 说明 1.2 相关网址 1.3 名词解释 1.4 DolphinScheduler 架构 1.4.1 MasterServer 1.4.2 WorkerServer 1.4.3 ZooKeeper 1...
  • Spring 官方文档彩蛋

    千次阅读 2016-01-22 20:30:59
    Spring 官方文档彩蛋
  • 前期准备: 关于什么是Hierarchy Viewer,请查看官方文档:http://developer.android.com/tools/debugging/debugging-ui.html。个人理解:Hierarchy ...Android的官方文档中提到: To preserve se
  • txt文件电脑更改后(大量增添或删除),在手机上打开会变成乱码的原因可能是txt文件保存的格式不正确,可以另存为的时候更改转码格式,一般转为Unicode会正确。 ...
  • 近日有一个比较懒的需求,想在手机上看MD文档,但是又不想下载app。 又想躺床上用手机看以前写的MD文档,索性想到了Github page 和Gitee page. 于是爽快的把文档上传了。(如何Github||Gitee使用page功能请...
  • TXT文档如何更改默认编码格式

    千次阅读 2019-04-21 20:20:18
    更改默认的txt文档编码格式为什么要更改呢?第一步:创一个模板文本。第二步:修改模板文本的路径,指向第一步的模板文本 为什么要更改呢? 因为很多网上的txt文档,用记事本打开后,没有换行,但是作者肯定是工整的...
  • 手机聊天室即是运用语音音频来接替保守文字交换的形式停止沟通交换,眼前市场手机聊天室依据聊天的形式又多少种没有同的形式,一种是立即发言犹如电话通讯一样的聊天室软件,内中比拟正在专人的硬件有UCTalk...
  • 接口文档:第一章:简洁版接口文档

    千次阅读 多人点赞 2019-04-29 16:29:49
    ApiAddressController|收货地址管理控制器 获取收货地址列表信息 ... 接口地址:/address/find 请求方式:GET 请求参数:无 ...接口说明:添加或更新收货地址,有addressID为更新,没有addressID为添加 ...
  • 聊天工具设计文档

    2012-02-20 10:35:32
    5. 实现倒序、QWE、栅栏、手机、摩尔斯5种编码算法 6. 实现加解密过程可调试输出 7. 服务端界面方式呈现,客户端需要图形界面与命令行两种实现 8. 实现混合字符串的传送 9. 实现多行文本信息的发送,文本文件的加密...
  • 微信小程序开发中,可以非常方便的集成客服功能,只需要一行代码便可以将用户引导至客服会话界面。这行代码就是: <button open-type="contact" bindcontact="handleContact">联系我们</button> ...
  • [转]Redis2.8从入门到精通文档

    千次阅读 2015-04-06 18:15:30
    1. Overview1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。作者Antirez的博客,Antirez维护的Redis推特。Redis weekly redis周报。Redis 命令中文版, huangz同学的翻译,同时还有Redis官网几篇...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,156
精华内容 9,662
关键字:

如何在手机上存文档