android.os. Builder
常用的Dialog总结

Andoid Dialog1、AlertDialog,具有0-3个按钮,可以放选项、复选框单选框等,以建议的方式域用户交互可以。
2、ProgressDialog,显示一个进度的圆环或者进度条。
3、DataPickerDialog,选择日期的dialog。
4、TimePickerDialog,选择时间的dialog。
用户可以继承Dialog类或者它的子类并且创建一个新的leyout。
Showing a DialogDialog总是作为一个Activity的一部分来创建和显示的。
正常可以使用Activity的onCreateDialog(int)回调函数来创建Dialog。
使用这个回调函数的时候,系统会自动管理每个dialog的状态,并把它们关联到这个Activity,有效的使它成为dialog的所有者。
这样每个第啊咯个都从父Activity继承一些属性。
For example, when a dialog is open, the Menu key reveals the options menu defined for the Activity and the volume keys modify the audio stream used by the Activity.注意:如果你在onCreate()之外创建dialog,他不会附属于任何的Activity,可以使用dialog的setOwnerActivity(Activity)来设置。
当想显示一个dialog的时候,调用showDialog(int),并传递一个整数来唯一标识想要显示的dialog即可。
当第一次使用一个dialog的时候,Android会调用onCreateDialog(int),应该在这里创建dialog。
这个回调方法的参数是你传递给showDialog(int)的id。
创建Dialog结束后,返回这个dialog对象。
android build子系统解析

Android Building System 分析设定档Android building system 包括几种重要的设定档,* Android.mk* AndroidProducts.mk* target_<os>-<arch>.mk, host_<os>-<arch>.mk and <os>-<arch>.mk* BoardConfig.mk* buildspec.mkAndroid.mk 是module 和package 的设定档,每个module/package 的目录下都会有一个Android.mk。
所谓的module 是指系统的native code ,相对于用Java 写成的Android application 称为package。
AndroidProducts.mk 则设定product 配置。
product 即特定系统版本,透过编译不同product ,产生不同软件配置内容,安装不同的application。
Product 可视为特定项目,产生特定规格系统。
BoardConfig.mk 是为product 主板做设定,像是driver 选择、设定。
*<os>-<arch>.mk 则是针对选择的操作系统和CPU 架构,进行相关设定。
buildspec.mk 是位于source 根目录下,为进行编译者所做之额外设定。
例如,可在此选择要产生的product 、平台、额外的module/package 等。
参数build/envsetup.sh 实作一个mm 指令,以编译单一module,不需编译整个source tree。
ONE_SHOT_MAKEFILE 这个makefile 变量/参数就是用以实作这个功能。
使用方法是在执行make 时,将该变量指定为module 的Android.mk。
AndroidBuild类如何获取手机硬件信息

Android Build类如何获取手机硬件信息Android Build类是怎么到获取手机硬件信息的呢?别着急,接下来就让店铺来教下大家吧,快来看看吧,希望能让大家有所收获!了解获取手机硬件信息的Android Build的相关类1. Build.BOARD // 主板2. Build.BRAND // android系统定制商3. Build.CPU_ABI // cpu指令集4. Build.DEVICE // 设备参数5. Build.DISPLAY // 显示屏参数6. Build.FINGERPRINT // 硬件名称7. Build.HOST8. Build.ID // 修订版本列表9. Build.MANUFACTURER // 硬件制造商10. Build.MODEL // 版本11. Build.PRODUCT // 手机制造商12. Build.TAGS // 描述build的标签 13. Build.TIME14. Build.TYPE // builder类型15. ER通过Android Build类代码获取手机硬件信息import java.io.BufferedReader;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;import java.io.ObjectInputStream.GetField;import android.Manifest; import android.app.Activity;import android.app.ActivityManager;import android.app.ActivityManager.MemoryInfo; import android.content.Context;import android.content.pm.PackageManager; import.ConnectivityManager; import workInfo; import android.os.Build;import android.telephony.TelephonyManager; import android.util.Log;public class PhoneInfo {private static final String TAG = PhoneInfo.class.getSimpleName(); private static final String FILE_MEMORY = "/proc/meminfo"; private static final String FILE_CPU = "/proc/cpuinfo"; public String mIMEI; public int mPhoneType; public int mSysVersion;public String mNetWorkCountryIso; public String mNetWorkOperator; public String mNetWorkOperatorName; public int mNetWorkType; public boolean mIsOnLine;public String mConnectTypeName; public long mFreeMem; public long mT otalMem; public String mCupInfo; public String mProductName; public String mModelName;public String mManufacturerName;private PhoneInfo() {}public static String getIMEI(Context context) {TelephonyManager manager = (T elephonyManager) context .getSystemService(Activity.TELEPHONY_SERVICE); // check if has the permissionif (PackageManager.PERMISSION_GRANTED == context.getPackageManager().checkPermission(Manifest.permission.READ_PHONE_STATE, context.getPackageName())) { return manager.getDeviceId(); } else {return null; } }public static int getPhoneType(Context context) {TelephonyManager manager = (T elephonyManager) context .getSystemService(Activity.TELEPHONY_SERVICE); return manager.getPhoneType(); }public static int getSysVersion() { return Build.VERSION.SDK_INT; }public static String getNetWorkCountryIso(Context context) { TelephonyManager manager = (T elephonyManager) context .getSystemService(Activity.TELEPHONY_SERVICE); return manager.getNetworkCountryIso(); }public static String getNetWorkOperator(Context context) { TelephonyManager manager = (T elephonyManager) context .getSystemService(Activity.TELEPHONY_SERVICE); return manager.getNetworkOperator(); }public static String getNetWorkOperatorName(Context context) { TelephonyManager manager = (TelephonyManager) context.getSystemService(Activity.TELEPHONY_SERVICE); return manager.getNetworkOperatorName(); }public static int getNetworkType(Context context) {TelephonyManager manager = (T elephonyManager) context .getSystemService(Activity.TELEPHONY_SERVICE); return manager.getNetworkType(); }public static boolean isOnline(Context context) {ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Activity.CONNECTIVITY_SERVICE);NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null && info.isConnected()) { return true; }return false; }public static String getConnectTypeName(Context context) { if (!isOnline(context)) {return "OFFLINE"; }ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Activity.CONNECTIVITY_SERVICE);NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null) {return info.getTypeName(); } else {return "OFFLINE"; } }public static long getFreeMem(Context context) {ActivityManager manager = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE); MemoryInfo info = new MemoryInfo(); manager.getMemoryInfo(info);long free = info.availMem / 1024 / 1024; return free; }public static long getTotalMem(Context context) { try {FileReader fr = new FileReader(FILE_MEMORY); BufferedReader br = new BufferedReader(fr); String text = br.readLine();String[] array = text.split("\\s+"); Log.w(TAG, text);return Long.valueOf(array[1]) / 1024; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }return -1; }public static String getCpuInfo() { try {FileReader fr = new FileReader(FILE_CPU); BufferedReader br = new BufferedReader(fr);String text = br.readLine();String[] array = text.split(":\\s+", 2); for (int i = 0; i < array.length; i++) { Log.w(TAG, " ..... " + array[i]); }Log.w(TAG, text); return array[1];} catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }return null; }public static String getProductName() { return Build.PRODUCT; }public static String getModelName() { return Build.MODEL; } public static String getManufacturerName() { return Build.MANUFACTURER; }public static PhoneInfo getPhoneInfo(Context context) { PhoneInfo result = new PhoneInfo(); result.mIMEI = getIMEI(context);result.mPhoneType = getPhoneType(context); result.mSysVersion = getSysVersion();result.mNetWorkCountryIso = getNetWorkCountryIso(context); result.mNetWorkOperator = getNetWorkOperator(context);result.mNetWorkOperatorName = getNetWorkOperatorName(context); result.mNetWorkType = getNetworkType(context); result.mIsOnLine = isOnline(context);result.mConnectTypeName = getConnectTypeName(context); result.mFreeMem = getFreeMem(context); result.mT otalMem = getTotalMem(context); result.mCupInfo = getCpuInfo();result.mProductName = getProductName(); result.mModelName = getModelName();result.mManufacturerName = getManufacturerName(); return result; }@Overridepublic String toString() {StringBuilder builder = new StringBuilder(); builder.append("IMEI : "+mIMEI+"\n");builder.append("mPhoneType : "+mPhoneType+"\n");builder.append("mSysVersion : "+mSysVersion+"\n"); builder.append("mNetWorkCountryIso : "+mNetWorkCountryIso+"\n");builder.append("mNetWorkOperator : "+mNetWorkOperator+"\n");builder.append("mNetWorkOperatorName : "+mNetWorkOperatorName+"\n");builder.append("mNetWorkType : "+mNetWorkType+"\n"); builder.append("mIsOnLine : "+mIsOnLine+"\n");builder.append("mConnectTypeName : "+mConnectTypeName+"\n"); builder.append("mFreeMem : "+mFreeMem+"M\n"); builder.append("mTotalMem : "+mT otalMem+"M\n"); builder.append("mCupInfo : "+mCupInfo+"\n");builder.append("mProductName : "+mProductName+"\n");builder.append("mModelName : "+mModelName+"\n");builder.append("mManufacturerName : "+mManufacturerName+"\n");return builder.toString(); } }通过Android Build类获取手机硬件信息所需要的权限代码<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>。
app开发快速理解——推送通知小红点角标

app开发快速理解——推送通知⼩红点⾓标package com.example.chapter11;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.graphics.BitmapFactory;import android.os.Build;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.example.chapter11.util.ViewUtil;public class NotifySimpleActivity extends AppCompatActivity implements View.OnClickListener {private EditText et_title;private EditText et_message;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_notify_simple);et_title = findViewById(R.id.et_title);et_message = findViewById(R.id.et_message);findViewById(R.id.btn_send_simple).setOnClickListener(this);}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_send_simple) {ViewUtil.hideOneInputMethod(this, et_message); // 隐藏输⼊法软键盘if (TextUtils.isEmpty(et_title.getText())) {Toast.makeText(this, "请填写消息标题", Toast.LENGTH_SHORT).show();return;}if (TextUtils.isEmpty(et_message.getText())) {Toast.makeText(this, "请填写消息内容", Toast.LENGTH_SHORT).show();return;}String title = et_title.getText().toString();String message = et_message.getText().toString();sendSimpleNotify(title, message); // 发送简单的通知消息}}// 发送简单的通知消息(包括消息标题和消息内容)private void sendSimpleNotify(String title, String message) {// 发送消息之前要先创建通知渠道,创建代码见MainApplication.java// 创建⼀个跳转到活动页⾯的意图Intent clickIntent = new Intent(this, MainActivity.class);// 创建⼀个⽤于页⾯跳转的延迟意图PendingIntent contentIntent = PendingIntent.getActivity(this,R.string.app_name, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);// 创建⼀个通知消息的建造器Notification.Builder builder = new Notification.Builder(this);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {// Android 8.0开始必须给每个通知分配对应的渠道builder = new Notification.Builder(this, getString(R.string.app_name));}builder.setContentIntent(contentIntent) // 设置内容的点击意图.setAutoCancel(true) // 点击通知栏后是否⾃动清除该通知.setSmallIcon(R.mipmap.ic_launcher) // 设置应⽤名称左边的⼩图标.setSubText("这⾥是副本") // 设置通知栏⾥⾯的附加说明⽂本// 设置通知栏右边的⼤图标.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_app)).setContentTitle(title) // 设置通知栏⾥⾯的标题⽂本.setContentText(message); // 设置通知栏⾥⾯的内容⽂本Notification notify = builder.build(); // 根据通知建造器构建⼀个通知对象// 从系统服务中获取通知管理器NotificationManager notifyMgr = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);// 使⽤通知管理器推送通知,然后在⼿机的通知栏就会看到该消息notifyMgr.notify(R.string.app_name, notify);}}package com.example.chapter11;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.graphics.BitmapFactory;import android.os.Build;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.example.chapter11.util.ViewUtil;public class NotifyCounterActivity extends AppCompatActivity implements View.OnClickListener { private EditText et_title;private EditText et_message;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_notify_counter);et_title = findViewById(R.id.et_title);et_message = findViewById(R.id.et_message);findViewById(R.id.btn_send_counter).setOnClickListener(this);}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_send_counter) {ViewUtil.hideOneInputMethod(this, et_message); // 隐藏输⼊法软键盘if (TextUtils.isEmpty(et_title.getText())) {Toast.makeText(this, "请填写消息标题", Toast.LENGTH_SHORT).show();return;}if (TextUtils.isEmpty(et_message.getText())) {Toast.makeText(this, "请填写消息内容", Toast.LENGTH_SHORT).show();return;}String title = et_title.getText().toString();String message = et_message.getText().toString();sendCounterNotify(title, message); // 发送计时的通知消息}}// 发送计时的通知消息private void sendCounterNotify(String title, String message) {// 发送消息之前要先创建通知渠道,创建代码见MainApplication.java// 创建⼀个跳转到活动页⾯的意图Intent cancelIntent = new Intent(this, MainActivity.class);// 创建⼀个⽤于页⾯跳转的延迟意图PendingIntent deleteIntent = PendingIntent.getActivity(this,R.string.app_name, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT);// 创建⼀个通知消息的建造器Notification.Builder builder = new Notification.Builder(this);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {// Android 8.0开始必须给每个通知分配对应的渠道builder = new Notification.Builder(this, getString(R.string.app_name));}builder.setDeleteIntent(deleteIntent) // 设置内容的清除意图.setSmallIcon(R.mipmap.ic_launcher) // 设置应⽤名称左边的⼩图标// 设置通知栏右边的⼤图标.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_app)).setProgress(100, 60, false) // 设置进度条及其具体进度.setUsesChronometer(true) // 设置是否显⽰计时器.setContentTitle(title) // 设置通知栏⾥⾯的标题⽂本.setContentText(message); // 设置通知栏⾥⾯的内容⽂本Notification notify = builder.build(); // 根据通知建造器构建⼀个通知对象// 从系统服务中获取通知管理器NotificationManager notifyMgr = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);// 使⽤通知管理器推送通知,然后在⼿机的通知栏就会看到该消息notifyMgr.notify(R.string.app_name, notify);}}package com.example.chapter11.util;import android.annotation.TargetApi;import android.app.Notification;import android.app.NotificationChannel;import android.app.NotificationManager;import android.content.Context;import .Uri;import android.os.Build;import android.os.Bundle;import android.util.Log;import com.example.chapter11.BuildConfig;import ng.reflect.Field;import ng.reflect.Method;public class NotifyUtil {private final static String TAG = "NotifyUtil";@TargetApi(Build.VERSION_CODES.O)// 创建通知渠道。
android自定义对话框

接下来我们来看看如何在对话框中嵌套一个ListView。
首先,需要一个布局文件,布局文件里只创建一个ListView,如下代码<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent" android:scrollbars="vertical"> <ListViewandroid:id="@+id/listCity"android:layout_width="fill_parent"android:layout_height="fill_parent"android:scrollbars="vertical"/></LinearLayout>Java代码如下private void ShowLoginDialog(){Builder builder = new AlertDialog.Builder(Tab1Activity.this);builder.setTitle("选择城市");LayoutInflater factory = LayoutInflater.from(Tab1Activity.this); View dialogView = factory.inflate(yout.dialogcity, null); listCity =(ListView)dialogView.findViewById(R.id.listCity);GetCity();builder.setView(dialogView);builder.show();}private void GetCity(){System.out.println("asd");ArrayList<HashMap<String, String>> listData = new ArrayList<HashMap<String,String>>();HashMap<String, String> hmItem = new HashMap<String, String>();hmItem.put("city", "北京");listData.add(hmItem);hmItem = new HashMap<String, String>();hmItem.put("city", "上海");listData.add(hmItem);hmItem = new HashMap<String, String>();hmItem.put("city", "深圳");listData.add(hmItem);hmItem = new HashMap<String, String>();hmItem.put("city", "天津");listData.add(hmItem);hmItem = new HashMap<String, String>();hmItem.put("city", "南京");listData.add(hmItem);hmItem = new HashMap<String, String>();hmItem.put("city", "武汉");listData.add(hmItem);hmItem = new HashMap<String, String>();hmItem.put("city", "江苏");listData.add(hmItem);hmItem = new HashMap<String, String>();listData.add(hmItem);SimpleAdapter sim = new SimpleAdapter(this, listData, yout.simple_list_item_1, new String[]{"city"}, new int[]{android.R.id.text1});listCity.setAdapter(sim);}直接调用ShowLoginDialog方法即可。
android显示单选列表对话框builder.setSingleChoiceItems

android显⽰单选列表对话框builder.setSingleChoiceItems通过AlertDialog.Builder类的setSingleChoiceItems⽅法可以创建带单按钮的列表:⽅法如下:1、从资源⽂件中装载数据:public Builder setSingleChoiceItems(int itemsId, int checkedItem, finalOnClickListener listener)2、从数据集中装载数据public Builder setSingleChoiceItems(Cursorcursor, int checkedItem, String labelColumn, final OnClickListener listener)3、从字符串数组中装载数据public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, finalOnClickListener listener)4、从ListAdapter对象中装载数据public BuildersetSingleChoiceItems(ListAdapter adpater, int checkedItem, final OnClickListener listener)package com.js.sinlgechoiceitemstest;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class SingleChoiceItemsTest extends Activity implements OnClickListener{private String[] province = new String[] { "上海", "北京", "湖南", "湖北", "海南" };private Button btnSingleChoiceList;// 单击事件对象的实例private ButtonOnClick buttonOnClick = new ButtonOnClick(1);/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);btnSingleChoiceList = (Button) findViewById(R.id.btnSingleChoice);btnSingleChoiceList.setOnClickListener(this);}@Overridepublic void onClick(View v){showSingleChoiceButton();}// 在单选选项中显⽰确定和取消按钮//buttonOnClickg变量的数据类型是ButtonOnClick,⼀个单击事件类private void showSingleChoiceButton(){AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("请选择省份");builder.setSingleChoiceItems(province, 0, buttonOnClick);builder.setPositiveButton("确定", buttonOnClick);builder.setNegativeButton("取消", buttonOnClick);builder.show();}private class ButtonOnClick implements DialogInterface.OnClickListener{private int index; // 表⽰选项的索引public ButtonOnClick(int index){this.index = index;}@Overridepublic void onClick(DialogInterface dialog, int which){// which表⽰单击的按钮索引,所有的选项索引都是⼤于0,按钮索引都是⼩于0的。
OSBuilder

1.1 OSBuilder的模板文件夹结构:模板文件夹结构如下:.\Configurations --> 放置默认的配置文件(_Default.xml),当“保存为默认配置”时由程序自动生成;.\OEM --> 您可以将除 SYS 和 XIP 以外的所有的 OEM 组件全部放置于此;.\EXT --> 可有可无。
有的话,您可以将 OEM 目录下的类似于官方 ROM 中以OEM 组件放置于此。
当然,具体放什么,取决于您的喜好。
.\ROM\XIP --> 放置 MSXIPKernel、MSXIPKernelLTK、OEMXIPKernel 等。
由程序产生。
方法:附加工具->创建模板->选择官方的 .nb0/.payload 文件-> OK。
包括以下文件和目录:Map.txtparthdr.binromhdr.binboot.rgu(必须)\LangDB\MSXIPKernel\MSXIPKernelLTK\OEMXIPKERNEL\WinCENLS_Lang_0804ROM.tpl-->该名称可自己命名,为模板文件,创建方法如下:附加工具->创建模板->选择官方的 .nb0/.payload 文件-> OK,保存即可。
OS.nb0-->创建模板文件必须的文件,也就是I900的os.nb。
XIP.bin-->I900的原始的XIP.bin文件,可有可无。
\LZX36-->LZX压缩方式必须的cecompr.dll文件\LZX16--> LZX压缩方式必须的cecompr.dll文件.\SYS --> 不用多说了.\Donor-->用来存放你要移植的新核心xip文件,可以是一个xip.bin文件,也可以是MSXIPKernel文件夹形式,用于移植xip。
其他的就自己随意建来用啦,比如说我自己建立一个tools文件夹用于存放其它一些工具,建立一个Flash文件夹存放生成的rom等等。
android浏览器源代码

/bbs/home.php?mod=invite&id=62&c=apzrou /bbs/home.php?mod=invite&id=61&c=akkahk /bbs/home.php?mod=invite&id=60&c=zhhsor /bbs/home.php?mod=invite&id=59&c=4ukha8 /bbs/home.php?mod=invite&id=58&c=lgg60m /bbs/home.php?mod=invite&id=57&c=ymgm3m /bbs/home.php?mod=invite&id=56&c=n5zhht /bbs/home.php?mod=invite&id=55&c=huukbh /bbs/home.php?mod=invite&id=54&c=8yrc1c /bbs/home.php?mod=invite&id=53&c=stf115package com.explorer;import static com.mime.MIME.MIME_MapTable;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream; import java.util.ArrayList;import java.util.Arrays;import parator;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent;import .Uri;import android.os.Bundle;import android.os.Environment; import android.os.Handler;import android.os.Looper;import android.os.Message;import youtInflater; import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import com.file.R;public class MainActivity extends Activity implements OnClickListener, OnItemClickListener, OnItemLongClickListener { private TextView currentDir;private Button btnC;private Button btnE;private ListView listView;private File rootDir;private File copyPath;private String flag;private String startFilePath;private String desFilePath;private List<File> fileList = new ArrayList<File>();private ProgressDialog progressDialog;private int currentLen = 0;private long totaLength = 0;private Handler messageHandler;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.main);currentDir = (TextView) findViewById(R.id.currentDir);// fileName = (TextView) findViewById();btnC = (Button) findViewById(R.id.btnC);btnE = (Button) findViewById(R.id.btnE);btnC.setOnClickListener(this);btnE.setOnClickListener(this);listView = (ListView) findViewById(R.id.listView);listView.setOnItemClickListener(this);listView.setOnItemLongClickListener(this);//得到当前线程的Looper实例,由于当前线程是UI线程也可以通过Looper.getMainLooper()得到messageHandler = new MessageHandler(Looper.myLooper());if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { rootDir = Environment.getExternalStorageDirectory();} else {rootDir = Environment.getRootDirectory();}loadFiles(rootDir);}//自定义Handlerclass MessageHandler extends Handler {public MessageHandler(Looper looper) {super(looper);}@Overridepublic void handleMessage(Message msg) {loadFiles(new File(currentDir.getText().toString()));}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.menu, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if (item.getItemId() == R.id.newFile) {LayoutInflater factory = LayoutInflater.from(MainActivity.this);final View view = factory.inflate(yout.rename, null);AlertDialog d = new AlertDialog.Builder(MainActivity.this).setCancelable(true).setMessage("文件夹名") .setView(view).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String dirName = ((EditText) view.findViewById(R.id.rename)).getText().toString();String newFile = currentDir.getText().toString() + "/" + dirName;if (new File(newFile).exists()) {Toast.makeText(MainActivity.this, "文件夹已存在", Toast.LENGTH_LONG).show();return;}File f = new File(currentDir.getText().toString(), dirName);f.mkdir();}}).create();d.show();} else if (item.getItemId() == R.id.about) {Dialog d = new AlertDialog.Builder(MainActivity.this).setTitle("文件浏览器1.0beta").setMessage("本程序由劲松Alex制作") .setPositiveButton("确定", null).create();d.show();} else if (item.getItemId() == R.id.exit) {MainActivity.this.finish();}return true;}/*** 加载当前文件夹列表* */public void loadFiles(File dir) {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();if (dir != null) {// 处理上级目录if (!dir.getAbsolutePath().equals(rootDir.getAbsolutePath())) {Map<String, Object> map = new HashMap<String, Object>();map.put("file", dir.getParentFile());map.put("name", "上一级目录");map.put("img", R.drawable.folder);list.add(map);}currentDir.setText(dir.getAbsolutePath());File[] files = dir.listFiles();sortFiles(files);if (files != null) {for (File f : files) {Map<String, Object> map = new HashMap<String, Object>();map.put("file", f);map.put("name", f.getName());map.put("img", f.isDirectory() ? R.drawable.folder: (f.getName().toLowerCase().endsWith(".zip") ? R.drawable.zip : R.drawable.text));list.add(map);}}} else {Toast.makeText(this, "目录不正确,请输入正确的目录!", Toast.LENGTH_LONG).show();}ListAdapter adapter = new SimpleAdapter(this, list, yout.item, new String[] { "name", "img" }, new int[] {, R.id.icon });// listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);listView.setAdapter(adapter);}/*** 排序文件列表* */private void sortFiles(File[] files) {Arrays.sort(files, new Comparator<File>() {public int compare(File file1, File file2) {if (file1.isDirectory() && file2.isDirectory())return 1;if (file2.isDirectory())return 1;return -1;}});}/*** 打开文件** @param file*/private void openFile(File file) {Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 设置intent的Action属性intent.setAction(Intent.ACTION_VIEW);// 获取文件file的MIME类型String type = getMIMEType(file);// 设置intent的data和Type属性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
根据Android的安全机制,在使用TelephonyManager时,必须在AndroidManifest.xml 中添加<uses-permission android:name="READ_PHONE_STATE" /> 否则无法获得系统的许可。
手机型号Build.MODEL
String MODEL The end-user-visible name for the end product.
sdk版本 Build.VERSION.SDK
String SD
K
This constant is deprecated. Use SDK_INT to easily get this as an integer.
及frimware版本号(系统版本号)Build.VERSION.RELEASE
String RELEASE The user-visible version string.
private void loadPhoneStatus() { TelephonyManager
phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); txtPhoneModel.setText(Build.MODEL); //手机型号
txtPhoneNumber.setT ext(phoneMgr.getLine1Number());//本机电话号码
txtSdkVersion.setText(Build.VERSION.SDK);//SDK版本号
txtOsVersion.setText(Build.VERSION.RELEASE);//Firmware/OS 版本号}
事实上,Build能向我们提供包括硬件厂商,硬件编号,序列号等很多信息调用方法也都同上,很简单。
Strin
g
BOARD The name of the underlying board, like "goldfish".
Strin
g
BOOTLOADER The system bootloader version number.
Strin
g
BRAND The brand (e.g., carrier) the software is customized for, if any.
Strin
g
CPU_ABI The name of the instruction set (CPU type + ABI convention) of native code.
Strin
g CPU_ABI2The name of the second instruction set (CPU type + ABI convention) of native code.
Strin DEVICE The name of the industrial design.
g
Strin
g
DISPLAY A build ID string meant for displaying to the user
Strin
g
FINGERPRINT A string that uniquely identifies this build.
Strin
g
HARDWARE The name of the hardware (from the kernel command line or /proc).
Strin
g
HOST
Strin
g
ID Either a changelist number, or a label like "M4-rc20".
Strin
g MANUFACTURE
R
The manufacturer of the product/hardware.
Strin
g
MODEL The end-user-visible name for the end product.
Strin
g
PRODUCT The name of the overall product.
Strin
g
RADIO The radio firmware version number.
Strin
g
SERIAL A hardware serial number, if available.
Strin
g
TAGS Comma-separated tags describing the build, like "unsigned,debug".
long TIME
Strin
g
TYPE The type of build, like "user" or "eng".
Strin
g
UNKNOWN Value used for when a build property is unknown.
Strin
g
USER
android.os.Build
Java代码
1Build.BOARD // 主板
2Build.BRAND // android系统定制商
3Build.CPU_ABI // cpu指令集
4Build.DEVICE // 设备参数
5Build.DISPLAY // 显示屏参数
6Build.FINGERPRINT // 硬件名称
7Build.HOST
8Build.ID // 修订版本列表
9Build.MANUFACTURER // 硬件制造商
10Build.MODEL // 版本
11Build.PRODUCT // 手机制造商
12Build.TAGS // 描述build的标签
13Build.TIME
14Build.TYPE // builder类型
ER
16
17// 运行结果
18/*
19board: unknown
20brand: generic
21cpu abi: armeabi
22device: generic
23display: google_sdk-eng 2.1 ERD79 22607 test-keys
24finger print: generic/google_sdk/generic/:2.1/ERD79/22607:eng/test-keys 25host:
26id: ERD79
27manufacturer: unknown
28model: google_sdk
29product: google_sdk
30tags: test-keys
31time: 1261185425000
32type: eng
33user: android-build
34*/
Build.VERSION
Java代码
35// 当前开发代号
36Build.VERSION.CODENAME
37// 源码控制版本号
38Build.VERSION.INCREMENTAL
39// 版本字符串
40Build.VERSION.RELEASE
41// 版本号
42Build.VERSION.SDK
43// 版本号
44Build.VERSION.SDK_INT
45
46// 结果
47/*
48REL
4922607
50 2.1
517
527
53*/
54
55// Build.VERSION.SDK_INT可与switch搭配用
56switch (Build.VERSION.SDK_INT) {
57case Build.VERSION_CODES.BASE: // 1.0
58break;
59
60case Build.VERSION_CODES.BASE_1_1: // 1.1
61break;
62
63case Build.VERSION_CODES.CUPCAKE: // 1.5
64break;
65
66case Build.VERSION_CODES.CUR_DEVELOPMENT: // current dev version 67break;
68
69case Build.VERSION_CODES.DONUT: // 1.6
70break;
71
72case Build.VERSION_CODES.ECLAIR: // 2.0
73break;
74
75case Build.VERSION_CODES.ECLAIR_0_1: // 2.0.1
76break;
77
78case Build.VERSION_CODES.ECLAIR_MR1: // 2.1
79break;。