Android----弹出框选择文件夹目录以及启用新的Task打开文件_IT168文库
Android系统文件夹目录详解 - 手机入门知..
\\system\\app\\Street.odex \\system\\app\\Sync.apk 同步程序 \\system\\app\\Sync.odex、 \\system\\app\\Talk.apk 语音程序 \\system\\app\\Talk.odex \\system\\app\\TelephonyProvider.apk 电话提供 \\system\\app\\TelephonyProvider.odex \\system\\app\\Up dater.apk 更新程序 \\system\\app\\Up dater.odex \\system\\app\\Vending.apk 制造商信息 \\system\\app\\Vending.odex \\system\\app\\VoiceDialer.apk 语音拨号器 \\system\\app\\VoiceDialer.odex \\system\\app\\YouTube.apk Youtube视频 \\system\\app\\YouTube.odex \\system\\bin这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是 Linux系统自带的组件,Android手机网就主要文件做下简单的分析介绍: \\system\\bin\\akmd \\system\\bin\\am \\system\\bin\\app_process 系统进程 \\system\\bin\\dalvikvm Dalvik 虚拟机宿主 \\system\\bin\\dbus-daemon 系统BUS总线监控 \\system\\bin\\debuggerd 调试器 \\system\\bin\\debug_tool 调试工具 \\system\\bin\\dexopt DEX选项 \\system\\bin\\dhcpcd DHCP服务器 \\system\\bin\\dumpstate 状态抓取器 \\system\\bin\\dumpsys 系统抓取器 \\system\\bin\\dvz \\system\\bin\\fillup \\system\\bin\\flash_image 闪存映像 \\system\\bin\\hciattach \\system\\bin\\hcid HCID内核 \\system\\bin\\hostapd \\system\\bin\\hostapd_cli \\system\\bin\\htclogkernel \\system\\bin\\input \\system\\bin\\installd \\system\\bin\\itr \\system\\bin\\linker \\system\\bin\\logcat Logcat日志打印 \\system\\bin\\logwrapper \\system\\bin\\mediaserver \\system\\bin\\monkey \\system\\bin\\mountd 存储挂载器 \\system\\bin etcfg 网络设置 \\system\\bin\\ping Ping程序 \\system\\bin\\playmp3 MP3播放器 \\system\\bin\\pm 包管理器 \\system\\bin\\qemud QEMU虚拟机 \\system\\bin\\radiooptions 无线选项
12352233android系统文件夹目录说明
如果您不需要这些缓存文件或者磁盘空间不足,请随意删除,删除后不会影响软件的运行。
注:删除前,请退出迅雷和迅雷看看播放器,防止由于软件对内容的读写导致无法删除。
注:在迅雷看看播放器(3.2或以上版本)中可以自定义本目录的位置。本目录为迅雷看看的缓存目录。
xv文件为片库和网页播放的缓存文件,保留这些文件可以让您再次播放的时候在联网状态下无须重新缓冲。
影片下载完后会转化为完整的视频文件,并且清除缓存文件。
如果您不需要这些缓存文件或者磁盘空间不足,请随意删除,删除后不会影响软件的运行。
注:删除前,请退出迅雷和迅雷看看播放器,防止由于软件对内容的读写导致无法删除。
注:在迅雷看看播放器(3.2或以上版本)中可以自定义本目录的位置。本目录为迅雷看看的缓存目录。
影片下载完后会转化为完整的视频文件,并且清除缓存文件。
如果您不需要这些缓存文件或者磁盘空间不足,请随意删除,删除后不会影响软件的运行。
注:删除前,请退出迅雷和迅雷看看播放器,防止由于软件对内容的读写导致无法删除。
注:在迅雷看看播放器(3.2或以上版本)中可以自定义本目录的位置。本目录为迅雷看看的缓存目录。
如果您不需要这些缓存文件或者磁盘空间不足,请随意删除,删除后不会影响软件的运行。
注:删除前,请退出迅雷和迅雷看看播放器,防止由于软件对内容的读写导致无法删除。
注:在迅雷看看播放器(3.2或以上版本)中可以自定义本目录的位置。本目录为迅雷看看的缓存目录。
xv文件为片库和网页播放的缓存文件,保留这些文件可以让您再次播放的时候在联网状态下无须重新缓冲。
本目录为迅雷看看的缓存目录。
xv文件为片库和网页播放的缓存文件,保留这些文件可以让您再次播放的时候在联网状态下无须重新缓冲。
Android7.0运行时权限弹窗问题的解决
Android7.0运⾏时权限弹窗问题的解决Android 7.0系统在运⾏应⽤的时候,对权限做了诸多限制,normal, dangerous, signature, signatureOrSystem ,取决于保护级别,在确定是否授予权限时,系统可能采取不同的操作。
normal 表⽰权限是低风险的,不会对系统、⽤户或其他应⽤程序造成危害;dangerous 表⽰权限是⾼风险的,系统将可能要求⽤户输⼊相关信息,才会授予此权限;signature 表⽰只有当应⽤程序所⽤数字签名与声明引权限的应⽤程序所⽤数字签名相同时,才能将权限授给它;signatureOrSystem 表⽰将权限授给具有相同数字签名的应⽤程序或android 包类。
这⼀保护级别适和于⾮常特殊的情况,⽐如多个供应商需要通过系统映像共享功能时运⾏时权限弹窗问题是很多系统定制的客户要求屏蔽的,⼀直以来没有特别好的⽅法,下⾯我分享⼀下我⾃⼰验证可⾏的⽅案⽅案1,修改frameworks/base/services/core/java/com/android/server/pm/PackageManagerService和frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy⽂件,PackageManagerService ⽂件修改代码如下:@Overridepublic void systemReady() {...synchronized (mPackages) {...for (int userId : UserManagerService.getInstance().getUserIds()) {//if (!mSettings.areDefaultRuntimePermissionsGrantedLPr(userId)) {//注释掉这个判断grantPermissionsUserIds = ArrayUtils.appendInt(grantPermissionsUserIds, userId);//}}}DefaultPermissionGrantPolicy⽂件修改代码如下:private void grantPermissionsToSysComponentsAndPrivApps(int userId) {Log.i(TAG, "Granting permissions to platform components for user " + userId);synchronized (mService.mPackages) {for (PackageParser.Package pkg : mService.mPackages.values()) {// if (!isSysComponentOrPersistentPlatformSignedPrivAppLPr(pkg) //删掉isSysComponentOrPersistentPlatformSignedPrivAppLPr判断if(!doesPackageSupportRuntimePermissions(pkg)|| pkg.requestedPermissions.isEmpty()) {continue;}Set<String> permissions = new ArraySet<>();final int permissionCount = pkg.requestedPermissions.size();for (int i = 0; i < permissionCount; i++) {String permission = pkg.requestedPermissions.get(i);BasePermission bp = mService.mSettings.mPermissions.get(permission);if (bp != null && bp.isRuntime()) {permissions.add(permission);}}if (!permissions.isEmpty()) {grantRuntimePermissionsLPw(pkg, permissions, true, userId);}}}}简单说明下这个⽅案的修改原理,在PMS的systemReady⽅法中会遍历所有拥有默认运⾏时权限应⽤,通过遍历它们的UserId来赋予权限,注释掉判断是否为拥有运⾏时权限的应⽤⽅法后,会遍历所有应⽤,遍历应⽤且赋予权限的操作是在DefaultPermissionGrantPolicy中grantPermissionsToSysComponentsAndPrivApps⽅法,注释掉判断签名应⽤和系统应⽤的⽅法,普通应⽤也可以获取所有运⾏时权限,这样所有应⽤都不会有运⾏时权限的弹窗了。
安卓系统文件夹结构及其文件解析
安卓系统文件夹结构及其文件解析安卓系统的文件夹结构是由多个文件夹和文件组成,每个文件夹和文件都有特定的功能和用途。
下面将详细介绍安卓系统文件夹结构及其文件解析。
1.根目录(/)根目录是整个文件系统的起点,它包含了一些重要的目录和文件,例如:- system:系统文件夹,包含了系统的核心文件和程序。
- data:数据文件夹,包含了应用程序的数据和设置。
- dev:设备文件夹,包含了设备的文件和设备节点。
- proc:进程文件夹,包含了正在运行的进程的信息。
- etc:配置文件夹,包含了系统的配置文件。
- mnt:挂载文件夹,包含了已挂载的存储设备。
- sys:系统文件夹,包含了系统的配置和状态信息。
- vendor:供应商文件夹,包含了设备供应商提供的一些文件。
2. system文件夹system文件夹是安卓系统的核心,包含了系统的核心文件和程序。
其中一些重要的子文件夹和文件包括:- app:应用程序文件夹,包含了系统预装的应用程序。
- etc:配置文件夹,包含了系统的配置文件。
- lib:共享库文件夹,包含了系统的共享库文件。
- media:多媒体文件夹,包含了系统的多媒体文件。
- framework:框架文件夹,包含了系统的框架文件。
- priv-app:特权应用程序文件夹,包含了一些特权应用程序。
3. data文件夹data文件夹包含了应用程序的数据和设置。
其中一些重要的子文件夹和文件包括:- app:应用程序文件夹,包含了已安装的应用程序。
- data:数据文件夹,包含了应用程序的数据。
- system:系统数据文件夹,包含了一些系统的数据文件。
- dalvik-cache:Dalvik虚拟机缓存文件夹,包含了应用程序的二进制代码缓存。
- shared_prefs:共享首选项文件夹,包含了应用程序的共享首选项。
4. dev文件夹dev文件夹包含了设备的文件和设备节点。
其中一些重要的文件和文件夹包括:- null:空设备文件,用于丢弃输出。
Android编译命令
Android编译命令⼀、引⾔先看下⾯⼏条指令,相信编译过Android源码的⼈都再熟悉不过的。
source setenv.shlunchmake -j12记得最初刚接触Android时,同事告诉我⽤上⾯的指令就可以编译Android源码,指令虽短但过⼏天就记不全或者忘记顺序,每次编译时还需要看看⾃⼰的云笔记,冰冷的指令总是难以让我记忆。
后来我决定认真研究下这个指令的含义。
知其然还需知其所以然,这样能更深层次的理解并记忆,才能与⾃⾝的知识体系建⽴强连接,或许还有意外收获,果然如此,接下来跟⼤家分享⼀下在研究上述⼏条指令含义的过程中,深⼊了解到的Android Build(编译)系统。
⼆、编译命令准备好编译环境后,编译Android源码的第⼀步是source build/envsetup.sh,其中source命令就是⽤于运⾏shell脚本命令,功能等价于”.”,因此该命令也等价于. build/envsetup.sh。
在⽂件envsetup.sh声明了当前会话终端可⽤的命令,这⾥需要注意的是当前会话终端,也就意味着每次新打开⼀个终端都必须再⼀次执⾏这些指令。
起初并不理解为什么新开的终端不能直接执⾏make指令,到这⾥总算明⽩了。
接下来,解释⼀下本⽂开头的引⽤的命令:source setenv.sh //初始化编译环境,包括后⾯的lunch和make指令lunch //指定此次编译的⽬标设备以及编译类型make -j12 //开始编译,默认为编译整个系统,其中-j12代表的是编译的job数量为12。
所有的编译命令都在envsetup.sh⽂件能找到相对应的function,⽐如上述的命令lunch,make,在⽂件⼀定能找到function lunch(){...}function make(){...}source envsetup.sh,需要cd到setenv.sh⽂件所在路径执⾏,路径可能在build/envsetup.sh,或者integrate/envsetup.sh,再或者不排除有些⼚商会封装⾃⼰的.sh脚本,但核⼼思路是⼀致的。
Android中调用文件管理器并返回选中文件的路径
Android中调⽤⽂件管理器并返回选中⽂件的路径实际项⽬中经常需要调⽤⽂件管理器,选择下载路径或者上传的本地⽂件路径。
今天就给⼤家做个demo⽰范该功能的实现过程。
⼀、实现效果预览以下为三星S6的样机测试效果,当然不同⼿机调⽤后的效果不⼀样。
⼆、代码实现布局⽂件很简单,就⼀个Button和TextView,这⾥不⽰范了,直接上实现代码:1package com.panhouye.selectfile;23import android.annotation.SuppressLint;4import android.app.Activity;5import android.content.ContentUris;6import android.content.Context;7import android.content.Intent;8import android.database.Cursor;9import .Uri;10import android.os.Build;11import android.os.Bundle;12import android.os.Environment;13import android.provider.DocumentsContract;14import android.provider.MediaStore;15import android.support.v7.app.AppCompatActivity;16import android.view.View;17import android.widget.Button;18import android.widget.TextView;19import android.widget.Toast;2021public class MainActivity extends AppCompatActivity {22 TextView tv;23 @Override24protected void onCreate(Bundle savedInstanceState) {25super.onCreate(savedInstanceState);26 setContentView(yout.activity_main);27 Button btn = (Button) findViewById(R.id.btn);28 tv = (TextView) findViewById();29 btn.setOnClickListener(new View.OnClickListener() {30 @Override31public void onClick(View v) {32 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);33//intent.setType(“image/*”);//选择图⽚34//intent.setType(“audio/*”); //选择⾳频35//intent.setType(“video/*”); //选择视频(mp4 3gp 是android⽀持的视频格式)36//intent.setType(“video/*;image/*”);//同时选择视频和图⽚37 intent.setType("*/*");//⽆类型限制38 intent.addCategory(Intent.CATEGORY_OPENABLE);39 startActivityForResult(intent, 1);40 }41 });42 }43 String path;44 @Override45protected void onActivityResult(int requestCode, int resultCode, Intent data) {46if (resultCode == Activity.RESULT_OK) {47 Uri uri = data.getData();48if ("file".equalsIgnoreCase(uri.getScheme())){//使⽤第三⽅应⽤打开49 path = uri.getPath();50 tv.setText(path);51 Toast.makeText(this,path+"11111",Toast.LENGTH_SHORT).show();52return;53 }54if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后55 path = getPath(this, uri);56 tv.setText(path);57 Toast.makeText(this,path,Toast.LENGTH_SHORT).show();58 } else {//4.4以下下系统调⽤⽅法59 path = getRealPathFromURI(uri);60 tv.setText(path);61 Toast.makeText(MainActivity.this, path+"222222", Toast.LENGTH_SHORT).show();62 }63 }64 }6566public String getRealPathFromURI(Uri contentUri) {67 String res = null;68 String[] proj = { MediaStore.Images.Media.DATA };69 Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);70if(null!=cursor&&cursor.moveToFirst()){;71int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);72 res = cursor.getString(column_index);73 cursor.close();74 }75return res;76 }7778/**79 * 专为Android4.4设计的从Uri获取⽂件绝对路径,以前的⽅法已不好使80*/81 @SuppressLint("NewApi")82public String getPath(final Context context, final Uri uri) {8384final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 8586// DocumentProvider87if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {88// ExternalStorageProvider89if (isExternalStorageDocument(uri)) {90final String docId = DocumentsContract.getDocumentId(uri);91final String[] split = docId.split(":");92final String type = split[0];9394if ("primary".equalsIgnoreCase(type)) {95return Environment.getExternalStorageDirectory() + "/" + split[1];96 }97 }98// DownloadsProvider99else if (isDownloadsDocument(uri)) {100101final String id = DocumentsContract.getDocumentId(uri);102final Uri contentUri = ContentUris.withAppendedId(103 Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));104105return getDataColumn(context, contentUri, null, null);106 }107// MediaProvider108else if (isMediaDocument(uri)) {109final String docId = DocumentsContract.getDocumentId(uri);110final String[] split = docId.split(":");111final String type = split[0];112113 Uri contentUri = null;114if ("image".equals(type)) {115 contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;116 } else if ("video".equals(type)) {117 contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;118 } else if ("audio".equals(type)) {119 contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;120 }121122final String selection = "_id=?";123final String[] selectionArgs = new String[]{split[1]};124125return getDataColumn(context, contentUri, selection, selectionArgs);126 }127 }128// MediaStore (and general)129else if ("content".equalsIgnoreCase(uri.getScheme())) {130return getDataColumn(context, uri, null, null);131 }132// File133else if ("file".equalsIgnoreCase(uri.getScheme())) {134return uri.getPath();135 }136return null;137 }138139/**140 * Get the value of the data column for this Uri. This is useful for141 * MediaStore Uris, and other file-based ContentProviders.142 *143 * @param context The context.144 * @param uri The Uri to query.145 * @param selection (Optional) Filter used in the query.146 * @param selectionArgs (Optional) Selection arguments used in the query.147 * @return The value of the _data column, which is typically a file path.148*/149public String getDataColumn(Context context, Uri uri, String selection,150 String[] selectionArgs) {151152 Cursor cursor = null;153final String column = "_data";154final String[] projection = {column};155156try {157 cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,158null);159if (cursor != null && cursor.moveToFirst()) {160final int column_index = cursor.getColumnIndexOrThrow(column);161return cursor.getString(column_index);162 }163 } finally {164if (cursor != null)165 cursor.close();166 }167return null;168 }169170/**171 * @param uri The Uri to check.172 * @return Whether the Uri authority is ExternalStorageProvider.173*/174public boolean isExternalStorageDocument(Uri uri) {175return "com.android.externalstorage.documents".equals(uri.getAuthority());176 }177178/**179 * @param uri The Uri to check.180 * @return Whether the Uri authority is DownloadsProvider.181*/182public boolean isDownloadsDocument(Uri uri) {183return "com.android.providers.downloads.documents".equals(uri.getAuthority());184 }185186/**187 * @param uri The Uri to check.188 * @return Whether the Uri authority is MediaProvider.189*/190public boolean isMediaDocument(Uri uri) {191return "com.android.providers.media.documents".equals(uri.getAuthority());192 }193 }三、⼩结这是调⽤系统⾃带的⽂件管理,⽆法保证和控制统⼀的界⾯显⽰,所以⼤家还是要实现与⾃⼰APP统⼀的⽂件管理界⾯,共勉。
android task用法
android task用法在Android中,Task是一个抽象概念,用于描述应用程序中的活动堆栈。
一个Task可以包含一个或多个Activity,这些Activity按照打开的顺序排列在堆栈中。
当用户启动一个应用程序时,系统会为该应用程序创建一个新的Task,并将其作为栈顶Activity的Task。
以下是关于Android Task用法的一些方面:1. 启动新的Task,在AndroidManifest.xml文件中,可以通过设置Activity的launchMode属性为singleTask或singleInstance来启动一个新的Task。
这样做会创建一个新的Task,并将该Activity作为Task的栈顶Activity。
2. Task的生命周期,Task的生命周期与Activity的生命周期相关联。
当用户启动一个Activity时,系统会将该Activity压入Task的堆栈中;当用户按下返回按钮时,系统会将该Activity弹出栈,销毁该Activity并恢复上一个Activity。
3. Task的管理,可以使用Intent标志(Intent.FLAG_ACTIVITY_NEW_TASK)来在应用程序中创建新的Task。
此外,可以使用TaskAffinity属性来指定Activity所属的Task。
4. 任务切换,在多任务处理时,用户可以通过最近任务列表(Recents)来切换不同的Task。
当用户切换到另一个Task时,系统会将该Task的顶部Activity显示在屏幕上。
5. 任务栈的清理,在某些情况下,系统可能会清理Task堆栈,释放资源。
开发人员可以通过设置Activity的clearTaskOnLaunch属性来控制Task的清理行为。
总的来说,Android中的Task提供了一种组织和管理Activity的方式,开发人员可以通过合理地使用Task来实现不同的导航和用户交互体验。
Android----弹出框选择文件夹目录以及启用新的Task打开文件_IT168文库
[ c-sh a r p ]
01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
列表显示 It e m 通过布局文件 file _ro w.xm l
[ c-sh a r p ]
01. 02. 03. 04.
<?xml version= " 1.0" encoding = " utf-8" ?> <LinearLayout xmlns:android= " /apk/res/android" android:orientation= " horiz ontal"
04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
android:orientation= " horiz ontal" android:layout_width= " fill_parent" android:layout_heig ht= " fill_parent" android:backg round= " #ffffff" > <LinearLayout android:orientation= " horiz ontal" android:layout_width= " fill_parent" android:layout_heig ht= " fill_parent" android:backg round= " @ drawable/listview_selected" android:padding = " 6px" > <Imag eView android:id= " @ +id/icon" android:layout_width= " 30dip" android:layout_heig ht= " 30dip" > </Imag eView> <T extView android:id= " @ +id/text" android:layout_g ravity= " center_horiz ontal" android:layout_width= " fill_parent" android:layout_heig ht= " wrap_content" android:textColor= " @ drawable/black" > </T extView> </LinearLayout> </LinearLayout>
VBS脚本中显示“选择文件对话框”或“选择目录对话框”
如何在VBS脚本中显示“选择文件对话框”或“选择目录对话框”标签:windows对话框文件夹shell资料来源:MSDN——Scripting Guy1、选择文件[XP操作系统,不能用于Win2000或98],使用“monDialog”对象向用户显示一个标准的“文件打开”对话框Set objDialog = CreateObject("monDialog")objDialog.Filter = "All Files|*.*"objDialog.InitialDir = "C:\"intResult = objDialog.ShowOpenIf intResult = 0 ThenWscript.QuitElse Wscript.Echo objDialog.FileNameEnd If这是一个小脚本,所以让我们逐行进行解释吧。
我们首先创建一个对monDialog 对象的对象引用(名为“objDialog”)。
接着,我们设置对话框的“筛选”属性。
我们要显示所有文件,所以我们将筛选设置成这样:objDialog.Filter = "All Files|*.*"假如我们只想显示文本文件,那该怎么办?在这种情况下,我们将使用以下筛选:objDialog.Filter = "Text Files|*.txt"您也许能够看出它是如何运行的:我们为文件类型提供说明 (Text Files),然后插入一个竖线分隔符 (|),最后使用标准的通配符来指示所有 .txt 文件(*.txt)。
是不是想默认显示 .txt 文件,然后为用户提供查看所有文件的选项?那么可以使用以下代码:objDialog.Filter = "Text Files|*.txt|All Files|*.*"试一试,您就明白我们的意思了。
Android开发之简单文件管理器实现方法
Android开发之简单⽂件管理器实现⽅法本⽂实例讲述了Android开发之简单⽂件管理器实现⽅法。
分享给⼤家供⼤家参考,具体如下:这⾥运⽤Java I/O、ListActivity、Dialog、Bitmap等实现简单⽂件管理器,可以查看⽬录⽂件,修改⽂件名,删除⽂件,打开⽂件。
⽐较简单,直接看代码:先看布局⽂件:layout/main.xml<?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"><ListViewandroid:id="@android:id/list"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>⽂件列表布局:layout/file.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="14sp"></TextView></LinearLayout>修改⽂件名对话框布局⽂件:layout/rename_dialog.xml<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>主Activity:public class MainActivity extends ListActivity {private static final String ROOT_PATH = "/";private ArrayList<String> paths = null;private View view;private EditText editText;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);//显⽰⽂件列表showFileDir(ROOT_PATH);}private void showFileDir(String path){names = new ArrayList<String>();paths = new ArrayList<String>();File file = new File(path);File[] files = file.listFiles();//如果当前⽬录不是根⽬录if (!ROOT_PATH.equals(path)){names.add("@1");paths.add(ROOT_PATH);names.add("@2");paths.add(file.getParent());}//添加所有⽂件for (File f : files){names.add(f.getName());paths.add(f.getPath());}this.setListAdapter(new MyAdapter(this,names, paths));}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) { String path = paths.get(position);File file = new File(path);// ⽂件存在并可读if (file.exists() && file.canRead()){if (file.isDirectory()){//显⽰⼦⽬录及⽂件showFileDir(path);}else{//处理⽂件fileHandle(file);}}//没有权限else{Resources res = getResources();new AlertDialog.Builder(this).setTitle("Message").setMessage(res.getString(R.string.no_permission)).setPositiveButton("OK",new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).show();}super.onListItemClick(l, v, position, id);}//对⽂件进⾏增删改private void fileHandle(final File file){OnClickListener listener = new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 打开⽂件if (which == 0){openFile(file);}//修改⽂件名else if(which == 1){LayoutInflater factory = LayoutInflater.from(MainActivity.this);view = factory.inflate(yout.rename_dialog, null);editText = (EditText)view.findViewById(R.id.editText);editText.setText(file.getName());OnClickListener listener2 = new DialogInterface.OnClickListener() {// TODO Auto-generated method stubString modifyName = editText.getText().toString();final String fpath = file.getParentFile().getPath();final File newFile = new File(fpath + "/" + modifyName);if (newFile.exists()){//排除没有修改情况if (!modifyName.equals(file.getName())){new AlertDialog.Builder(MainActivity.this).setTitle("注意!").setMessage("⽂件名已存在,是否覆盖?").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {if (file.renameTo(newFile)){showFileDir(fpath);displayToast("重命名成功!");}else{displayToast("重命名失败!");}}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).show();}}else{if (file.renameTo(newFile)){showFileDir(fpath);displayToast("重命名成功!");}else{displayToast("重命名失败!");}}}};AlertDialog renameDialog = new AlertDialog.Builder(MainActivity.this).create(); renameDialog.setView(view);renameDialog.setButton("确定", listener2);renameDialog.setButton2("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub}});renameDialog.show();}//删除⽂件else{new AlertDialog.Builder(MainActivity.this).setTitle("注意!").setMessage("确定要删除此⽂件吗?").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {if(file.delete()){//更新⽂件列表showFileDir(file.getParent());displayToast("删除成功!");}else{displayToast("删除失败!");}}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}};//选择⽂件时,弹出增删该操作选项对话框String[] menu = {"打开⽂件","重命名","删除⽂件"};new AlertDialog.Builder(MainActivity.this).setTitle("请选择要进⾏的操作!").setItems(menu, listener).setPositiveButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).show();}//打开⽂件private void openFile(File file){Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);String type = getMIMEType(file);intent.setDataAndType(Uri.fromFile(file), type);startActivity(intent);}//获取⽂件mimetypeprivate String getMIMEType(File file){String type = "";String name = file.getName();//⽂件扩展名String end = name.substring(stIndexOf(".") + 1, name.length()).toLowerCase();if (end.equals("m4a") || end.equals("mp3") || end.equals("wav")){type = "audio";}else if(end.equals("mp4") || end.equals("3gp")) {type = "video";}else if (end.equals("jpg") || end.equals("png") || end.equals("jpeg") || end.equals("bmp") || end.equals("gif")){ type = "image";}else {//如果⽆法直接打开,跳出列表由⽤户选择type = "*";}type += "/*";return type;}private void displayToast(String message){Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();}}⾃定义适配器:public class MyAdapter extends BaseAdapter{private LayoutInflater inflater;private Bitmap directory,file;//存储⽂件名称private ArrayList<String> names = null;//存储⽂件路径private ArrayList<String> paths = null;//参数初始化public MyAdapter(Context context,ArrayList<String> na,ArrayList<String> pa){names = na;paths = pa;directory = BitmapFactory.decodeResource(context.getResources(),R.drawable.d);file = BitmapFactory.decodeResource(context.getResources(),R.drawable.f);//缩⼩图⽚directory = small(directory,0.16f);file = small(file,0.1f);inflater = LayoutInflater.from(context);}@Overridepublic int getCount() {// TODO Auto-generated method stubpublic Object getItem(int position) {// TODO Auto-generated method stubreturn names.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder;if (null == convertView){convertView = inflater.inflate(yout.file, null);holder = new ViewHolder();holder.text = (TextView)convertView.findViewById(R.id.textView);holder.image = (ImageView)convertView.findViewById(R.id.imageView);convertView.setTag(holder);}else {holder = (ViewHolder)convertView.getTag();}File f = new File(paths.get(position).toString());if (names.get(position).equals("@1")){holder.text.setText("/");holder.image.setImageBitmap(directory);}else if (names.get(position).equals("@2")){holder.text.setText("..");holder.image.setImageBitmap(directory);}else{holder.text.setText(f.getName());if (f.isDirectory()){holder.image.setImageBitmap(directory);}else if (f.isFile()){holder.image.setImageBitmap(file);}else{System.out.println(f.getName());}}return convertView;}private class ViewHolder{private TextView text;private ImageView image;}private Bitmap small(Bitmap map,float num){Matrix matrix = new Matrix();matrix.postScale(num, num);return Bitmap.createBitmap(map,0,0,map.getWidth(),map.getHeight(),matrix,true);}}因为要对⽂件进⾏操作,所以在描述⽂件中授权:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.test.filemanager"android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="10" /><strong> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></strong><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".MainActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /></application></manifest>运⾏结果如下:查看⽬录⽂件⽂件重命名:删除⽂件:打开⽂件:希望本⽂所述对⼤家Android程序设计有所帮助。
详解Android全局弹出对话框SYSTEM_ALERT_WINDOW权限
详解Android全局弹出对话框SYSTEM_ALERT_WINDOW权限项⽬中为了实现账号多设备登录的监听⼀个账号在别的设备登录时在该设备上需要弹出对话框提⽰故⽽⽤到全局对话框⽅案⼀、1、在开发中有时会⽤到全局弹出对话框但必须在manifest中申请权限:<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />2、创建DialogAlertDialog.Builder builder=new AlertDialog.Builder(this);builder.setIcon(R.drawable.logo_mini);builder.setTitle("下线通知").setMessage("该账号在另⼀台Android设备上登录。
").setPositiveButton("重新登陆", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//do somthing}}).setNegativeButton("退出",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Intent i=new Intent(CoreService.this,LoginActivity.class);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(i);}});alertDialog = builder.create();alertDialog.setCancelable(false);alertDialog.setCanceledOnTouchOutside(false);alertDialog.getWindow().setType(youtParams.TYPE_SYSTEM_ALERT);alertDialog.show();注意要设置Dialog的Window类型为youtParams.TYPE_SYSTEM_ALERT。
Android学习笔记 ---项目的目录结构与安装及启动过程分析
Android学习笔记---项目的目录结构与安装及启动过程分析n 1.a.src文件夹:用来存放java源文件; n b.gen文件夹:开发工具自动创建的文件,有一个R文件,用来登陆资源id,在编译器编译的时n n候自动生成的,可以通过资源id,引用资源 n c.res是软件引用的文字,图片等等 n d.res-->drawable-hdpi-->这个文件夹:专门用来放图片资源,当把图片放入这个文件夹n n 的时候,就会为这个图片在R文件中生成一个资源id; n e.由于手机屏幕有大小,所以提供了:drawable-hdpi,drawable-ldpi,drawable-mdpi n n 三个不同的大小图片,android操作系统会根据手机屏幕的分辨率,来选择不同的文件夹n ylout文件夹:中的main.xml指的是定义系统的界面 n n values文件夹:strings.xml放了应用中用到的文字,为了实现国际化 2.a.在strings.xml中添加: n n <resources> n n <string name="hello">Hello World, MainActity!</string> n n <string name="app_name">HelloWorldTest</string> n n <stringname="credream">创梦网络</string> n n </resources> n b.在R文件中可以看到多了: n n n npublicstatic final class string { n n n n public static final int app_name=0x7f040001; n n n n public static final int credream=0x7f040002;//多了这一行 n n n n public static final inthello=0x7f040000; n n } --------------------------------------------3.a.当字体有很多的时候,为了不让string.xml过于大 n n 那么可以新建一个Android xml文件credream.xml,创建的时候,要加上后缀.xml n b.在credream.xml添加了以下: n n n<?xml version="1.0" encoding="utf-8"?> n n n<resources> n nn<string name="lidewei">李德伟</string> n n n</resources> n c.在R文件中会生成: n n public static final int lidewei=0x7f040000; ----------------------------------------------------------4.在layout中存放的界面文件main.xml n 下面再创建一个界面文件: n 右键新建android xml文件,adduser.xml,选择layout n n a.res\layout\addUser.xml: Invalid file name: must contain only [a-z0-9_.] n n1.res\layout\addUser.xml: Invalid file name: must contain only [a-z0-9_.] n n 出现这个的原因是,文件名不可以包含大写字母 n b.res/anim/文件夹:动画定义的xml文件; n c.res/xml文件夹:在Actity中使用getResource().getXML()读取该目录下的XML n n 资源文件 n c.res/raw/文件夹:该目录用于存放使用到的原始文件,如音效文件等,编译软件时,这些数n n n据不会被编译,他们被直接加入到程序安装包里,为了再程序中使用这些资源,你可以调用 n n getResources().openRawResource(ID),参数ID形式,R.raw.somefilename ----------------------------------------------------------------------5.a.assets文件夹:用来存放资源文件;在这里放入文件,不会在R文件中生成资源ID,需要使用 n n 文件路径来访问这里面的内容 nb.default.properties文件:是eclipse用的文件,通过这个文件可以告诉eclipse,这个程序 n n 适用于什么android版本 nc.AndroidManifest.xml文件,清单文件,在清单文件中除了列出了应用的功能外 n n 还列出了,自己应用使用了系统的什么服务,比如发短信服务,打电话服务; nd.以后开发的各种组件(Activity,ContentProvider,BroadcastReceiver,Service)需要在 n n n该文件中进行配置,如果应用使用到了系统内置的应用(如电话服务,互联网服务,短信服 n n n n 务,GPS服务等等)还要在该文件中声明使用权限 -----------------------------------------------------------------------6.AndroidManifest.xml文件 <? xml version="1.0" encoding="utf-8"?> <manifestxmlns:android="/apk/res/android" n n n package="com.credream.app" n//包名,唯一标示一个应用 n n n android:versionCode="1" n n //开发的软件的版本号,和版本名称n n n android:versionName="1.0"> n//版本名称n n n <application android:icon="@drawable/icon//指定应用的图标,drawable n n n指的是R文件中的drawable,指的是访问R文件中的drawable内部类中的icon常量 n n n,更换图标可以把一个图片的资源id赋予="@drawable/的后面," n n n n n nandroid:label="@string/app_name">//这个属性用于指定应用的名称,指定应用strings.xml n n 中的 napp_name指定的名称n n n n <activity android:name=".MainActity"//.代表当前应用所在包,取得是类的名字, n n如果这个类,在应用的包下,可以省略点.但是如果在应用包的子包下面需要加点,建议不管 n 在哪里都加点,避免出错n n n n n n n n n android:label="@string/app_name">//指的是窗口的标题n n n n n n <intent-filter>//指意图过滤器,对数据进行过滤,用来匹配意图,意图代表了 n n n n n n一个想法 n n n n n n n n <action android:name="android.intent.action.MAIN//这个字符串已经被安卓系统赋予了一个功能,就是把应用添加到启动列表中,如果没有这两项的话,应用是不会出现在 n 程序的启动列表中的,这两个参数只能使用在一个activity中" /> //动作的名称n n n n n n n n <categoryandroid:name="UNCHER" /> //动作的类别n n n n n n </intent-filter> n n n n </activity>//activity可以指定多个,因为一个activity代表一个窗口,那么可以有多个窗口 n n</application>//</application>应用有关的 n n <uses-sdk android:minSdkVersion="8" />//指定应用最低支持的版本 </manifest>n -------------------------------------------------------------------7.清单文件是在软件安装的时候被操作系统读取的;安装的时候,操作系统读取这个文件,然后 n 注册,相当于在windows下,安装软件的时候,注册进注册表一样---------------------------------------------------------8.a.编译器工作原理--->.java-->.class-->android虚拟机格式-->.dex...在/项目/bin/下 n n --->把dex.打包(签名)-->使用默认的密钥签名,这个密钥在:windows -->perference-n n>android--->Build-->右侧Default debug keystone就是密钥的位置-->签完名之后就把 n n这n 个文件 --->打包成apk格式的. n b.然后当运行的时候,eclipse adt插件会自动的调用adb.exe 执行 adb installn n n c:\xxx.apk --------------------------------------------------------------------9.a.当点击应用图标-->找到一个MainActivity-->然后创建一个进程,然后创建一个线程(主 n n n线程),在这个,线程里面对MainActivity这个类进行实例化,在实例化的时候,会首先在配 n nn n 置文件中读取这个类的名称:然后:使用反射MainActity .class.newInstance();来实例 n n n化这个MainActivity这个类--操作系统会把应用有关的信息(context)放在Activity中, n n 然后---调用oncreate--public void onCreate(Bundle savedInstanceState) { n n super.onCreate(savedInstanceState); n n --->把它放在一个任务栈中; nb.setContentView(yout.main);在窗口中显示软件界面-->只想layout文件夹下的 n n main.xml -------------------------------------------------------------------10. <?xml version="1.0"encoding="utf-8"?> <LinearLayout xmlns:android="/apk/res/android"// n n android:orientation="vertical"//指定了摆放的方向 n n android:layout_width="fill_parent"//填充窗口的宽和高 n n android:layout_height="fill_parent"// n n > <TextView//类似于java中的label标签: n用来显示的 n n android:layout_width="fill_parent" //textView的宽度和父窗口的宽度一样n nandroid:layout_height="wrap_content" //高度指的是包裹内容,就是说显示的内容有 n n n//多少,显示控件就有多高 n n android:text="@string/hello"//显示文字的意思,使用的是Strings.xml文件中,hello, n n//显示的资源 n n /> </LinearLayout>//指的是线性布局,线性布局 ---------------------------------------------------------------------------10.线性布局:摆放方式有两种: n na.以垂直方式摆放或者 n nb.以水平方式摆放 n 2.对于控件的宽度和高度也可以自己设置: n n <TextView//类似于java中的label标签: n用来显示的 n n android:layout_width="20dp" //textView的宽度和父窗口的宽度一样n nandroid:layout_height="wrap_content" //高度指的是包裹内容,就是说显示的内容有 n n n//多少,显示控件就有多高 n n android:text="@string/hello"//显示文字的意思,使用的是Strings.xml文件中,hello, n n//显示的资源 n n /> -------------nn n a.高度和宽度的单位有:1.dip或者是dp(device independent pixels)设备独立像素 n n 这个和设备硬件有关,一般为了支持WVGA,HVGA,和QVGA推荐使用这个,不依赖像素 n b.sp(scaled pixeis -best for text size)比例像素 ------------------除了以上两个还有两个不太常用的: n in(inches)英寸n n mm(millimeters)毫米 n pt(points)点,1/72英寸 ------------------------为了适应不同分辨率,不同的像素密度,推荐使用dip,文字使用sp 注意:android:layout_width="fill_parent" n n nfill_parent和match_parent作用是一样的 -------------------------------12.软件的启动过程: n n 当点击应用图标-->找到一个MainActivity-->然后创建一个进程,然后创建一个线程(主 n n n线程),在这个,线程里面对MainActivity这个类进行实例化,在实例化的时候,会首先在配 n nn n 置文件中读取这个类的名称:然后:使用反射MainActity .class.newInstance();来实例 n n n化这个MainActivity这个类--操作系统会把应用有关的信息(context)放在Activity中, n n 然后---调用oncreate--public void onCreate(Bundle savedInstanceState) { n n super.onCreate(savedInstanceState); n n --->把它放在一个任务栈中;然后会调用 n n nsetContentView(yout.main);//这里调用了layout,下的 n n n //main.xml,这里用到的是线性布局 n n n //有线性布局,相对布局,表格布局yout(帧布局) n n n //线性布局的两种方法: n。
android 获取路径目录方法以及判断目录是否存在,创建目录
android 获取路径目录方法以及判断目录是否存在,创建目录分类:android之恋2012-08-06 09:36 30746人阅读评论(5) 收藏举报androidfilestringpath存储classEnvironment 常用方法:* 方法:getDataDirectory()解释:返回File ,获取Android 数据目录。
* 方法:getDownloadCacheDirectory()解释:返回File ,获取Android 下载/缓存内容目录。
* 方法:getExternalStorageDirectory()解释:返回File ,获取外部存储目录即SDCard* 方法:getExternalStoragePublicDirectory(String type)解释:返回File ,取一个高端的公用的外部存储器目录来摆放某些类型的文件* 方法:getExternalStorageState()解释:返回File ,获取外部存储设备的当前状态* 方法:getRootDirectory()解释:返回File ,获取Android 的根目录public void getSDPath(){File sdDir = null;File sdDir1 = null;File sdDir2 = null;boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在if (sdCardExist){sdDir = Environment.getExternalStorageDirectory();//获取跟目录sdDir1 = Environment.getDataDirectory();sdDir2 =Environment.getRootDirectory();}System.out.println("getExternalStorageDirectory(): "+sdDir.toString());System.out.println("getDataDirectory(): "+sdDir1.toString());System.out.println("getRootDirectory(): "+sdDir2.toString()); }//判断一个路径下的文件(文件夹)是否存在public class IsExist {public static void main(String[] args) {isExist("e://12");}/**** @param path 文件夹路径*/public static void isExist(String path) {File file = new File(path);//判断文件夹是否存在,如果不存在则创建文件夹if (!file.exists()) {file.mkdir();}}}1.在SD卡上创建一个文件夹public class make extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);File sd=Environment.getExternalStorageDirectory();String path=sd.getPath()+"/notes";File file=new File(path);if(!file.exists())file.mkdir(); }。
Android启动过程
1. Boot系统初始化,具体过程参见(system\core\init\Init.c)中的main函数,这时候,手机或者模拟器出现的画面是一个console,显示“ANDROID”msg。
2. 初始化成功后,就开始mounting系统,具体参见(system\core\mountd\Mountd.c) 中的main 函数。
3.接下来运行ndroidRuntime,并开始启动java虚拟机dalvikvm。
4. Java虚拟机启动成功后,开始系统初始化。
系统初始的第一步是用JNI方式实现的,对应java代码为(frameworks\base\services\java\com\android\server\SystemServer.java) init1(Native)函数,对应的JNI C++代码为(frameworks\base\core\jni\server\com_android_server_SystemServer.cpp),而实现的C++代码为(frameworks\base\cmds\system_server\library\ System_init.cpp) 中的system_init()函数。
5. system_init调用SurfaceFlinger,SurfaceFlinger的readyToRun()函数用BootAnimation来实现开机动画,这时候手机或者模拟器显示是一副背景图加一个动态的小机器人。
6. 系统初始化的第二步,将启动ServerThread进程,参见SystemServer.init2()。
ServerThread 将启动各种系统服务,如Power Manager、Activity Manager等等,具体参见ServerThread的run函数,ServerThread同在SystemServer.java中。
7.这之后的事,应该就是进入系统了。
StarTeam工具操作指南
据.显示的数据类型取决于你选择哪一个选 项卡.
下面的窗格显示关于上面选中的对象的附加
信息.所有的信息也取决于你选中哪一个选 项卡.
上窗格选项卡 ① File ——文件 ② Change Request ——变更请求 ③ Requirement —— 需求
下窗格选项卡: Detali——列举了上面的窗格中选中的对象的信息. ① History——列举了上面的窗格中所选中的对象的
更改版本,从最近的版本到最除的版本.
④ Task —— 任务
⑤ Topic ——主题 ⑥ Audit ——日志
② Label——根据版本上所附加的标签,列举了上面
的窗格中所选中的对象的更改版本.最近的版本排 在最上面. 对象或文件夹。例如,一个更改要求可能与解决 问题的文件相关. 在工程中所使用的对象在工程中的位置.
Tasks
利用Task组件可以创建任务列表和对工作进行分配.
Topics
一种线性对话.即信息之间是如何相关的一系列消息.
Audit Log
一个以时间为顺序的记录,它记录对文件夹、文件、需求、变更请求、任务和主题所进行的 所有操作.每一次登录都会显示执行操作的用户,进行操作数据和时间,项目名称、窗口名称 等.
Nine/en
9、信息确认后,单击‚Next‛进入‚安装starTeam 5.4版‛对话框. 10、稍等片刻,待进度条走完,系统自动进入‚完装结束‛对话框.
End
11、单击‚Done‛按钮,安装结束!
启动StarTeam
安装完毕后,下一步就得启动工具进行操作. 找到你程序安装的路径,通常默认的是开始->程序->StarTeam5.4->StarTeam Client. 打开StarTeam Client,屏幕上将会显示一个空的StarTeam窗口,此时还没跟服务器连接及
Android手机通常在底部会有4个功能键
Android手机通常在底部会有4个功能键:返回键:返回前一操作屏幕;菜单键:弹出当前屏幕相关选项菜单;主屏键:回到待机主屏幕;搜索键:进行搜索。
现在的触摸屏一般都是电容式的,要使用指腹而不是指甲来触按屏幕及屏幕下方的4个按键。
用户手册说第一次开机时手机会自动出现Google帐户设置界面,但如果你买的手机不是行货的话,可能在购买前因为要刷系统而开过机了。
(建议注册一个谷歌账户,通过同步联系人,可以把通讯录保存在服务器,以后即使手机丢了,联系人也不会丢失。
)菜单键——设置——关于手机,可以查看手机的固件版本。
菜单键——设置——关于手机——状态,可以查看手机的IMEI号码。
怎样安装输入法?如果你对手机预装的输入法不习惯的话,建议第一时间安装搜狗输入法。
安装方法:打开“电子市场”,点右上角的搜索按钮,在输入框输入“输入法”,再点搜索按钮,点“搜狗手机输入法”,点安装按钮。
安装完毕后,点菜单键,选“设置——语言和键盘——启用搜狗输入法——设置搜狗输入法——键盘设置——选择键盘模式:数字键盘或全键盘”,建议使用数字键盘,因为全键盘的按键太小,容易按错。
(另外搜狗输入法有个技巧,在键盘界面,左右滑动,可以切换数字键盘、全键盘)怎样切换输入法?先在“语言和键盘”里启用需要使用的输入法,长按输入框,就会弹出选择菜单了。
怎样拨号打电话?点“拨号”图标,输入电话号码,点绿色电话按钮,即可开始拨号。
在拨号界面按菜单键,选“设置”,可以设置左侧按钮的动作。
点“联系人”图标,点联系人右边的绿色电话图标,可以进行拨号;点开联系人详情,点右边笑脸图标可以发送信息,点姓名右边的星号可以把该联系人加入收藏。
你可以把常用联系人加入收藏以方便使用。
怎样发送短信息?方法一:点“信息”图标——新信息——点“接收者”右边的头像可以从联系人中选择号码——选择联系人(右边打上绿勾,可选择多个联系人**)——按菜单键——确定——输入内容——点“发送”按钮。
AndroidStudio项目文件及目录详解
AndroidStudio项⽬⽂件及⽬录详解manifest⽬录AndroidManifest.xml<application//允许数据被备份/恢复android:allowBackup="true"//普通图标android:icon="@mipmap/ic_launcher"//名称android:label="@string/app_name"//圆形图标android:roundIcon="@mipmap/ic_launcher_round"//是否⽀持从左到右布局android:supportsRtl="true"//主题android:theme="@style/AppTheme">//注册活动<activity android:name=".MainActivity">//过滤器<intent-filter>//指定该活动为主活动<action android:name="android.intent.action.MAIN" />//显⽰桌⾯图标<category android:name="UNCHER" /></intent-filter></activity></application>java⽬录com.example.xxxxxxx.java:活动⽂件res⽬录drawable:存放图⽚layout:存放布局⽂件mipmap:存放图标values:存放字符串、样式、颜⾊strings.xml:存放字符串java代码调⽤:XML调⽤:@string/nameGradle Scriptsbuild.gradle(Project:xxxx)buildscript {repositories {google()jcenter() //jcenter引⽤}dependencies {//声明Gradle编译插件classpath 'com.android.tools.build:gradle:3.6.3'}}allprojects {repositories {google()jcenter()}}task clean(type: Delete) {delete rootProject.buildDir}build.gradle(Module:app)//表⽰这是⼀个应⽤程序模块apply plugin: 'com.android.application'//com.android.alibrary:表⽰库模块android {//编译版本compileSdkVersion 29//项⽬构建⼯具版本buildToolsVersion "29.0.3"//项⽬细节配置defaultConfig {//指定项⽬包名applicationId "com.example.test"//最低兼容版本minSdkVersion 16//经过测试的版本targetSdkVersion 29//指定项⽬版本号versionCode 1//指定项⽬版本名versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}//⽣成安装⽂件配置buildTypes {//⽣产正式版本⽂件配置release {//是否代码混淆minifyEnabled false//指定混淆规则⽂件proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' }}}//依赖关系配置dependencies {//本地依赖(libs⽬录下的所有后缀为jar⽂件)implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'androidx.appcompat:appcompat:1.0.2'implementation 'androidx.constraintlayout:constraintlayout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test.ext:junit:1.1.1'androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'}。
android系统的手机目录各个文件夹代表什么
自己整理的:打开ROOT目录后所看到的路径:ROOT手机后,安装一个Root Explor文件管理器(RE管理器)就可以看到手机系统里的各种文件夹以及各种文件了Mounted as r/o是什么?(Mounted as r/w可以切换成Mounted as r/o)r/w = read/write(就是说可以更改,删除等等)r/o = read only (就是单单读资料,不能更改)1、acct文件夹根目录/acct/ 系统回收站,误删除的系统文件恢复ACCT计算机语言,系统调用禁止/启用系统记录进程信息。
名称: acct -- 启用/禁止进程信息记录功能库: Standard C Library (libc, -lc)概要: #include <unistd.h> int acct(const char * file, int mode);详述: acct()系统调用禁止/启用系统系统调用禁止/启用系统记录进程信息。
若file为NULL,记录功能将被禁用;若file指向一个存在的文件(以'\0'结尾),则记录功能被启用,正常结束的进程都会在该文件尾添加对应的信息。
异常结束是指重启或其它致命的系统问题。
acct()不能生成那些永远不会结束的进程的信息acct()系统调用禁止/启用系统记录进程信息。
若file为NULL,记录功能将被禁用;若file指向一个存在的文件(以'\0'结尾),则记录功能被启用,正常结束的进程都会在该文件尾添加对应的信息。
异常结束是指重启或其它致命的系统问题。
acct()不能生成那些永远不会结束的进程的信息2、cache文件夹-----缓存(cache)3、config文件夹【计】(计算机系统)配置1、mnt 挂载点目录2、etc 系统主要配置文件3、system Android 系统文件4、sys Linux 内核文件5、proc 运行时文件6、init.rc 启动脚本7、default.prop 系统属性配置文件8、data 用户程序目录9、dev 设备文件system 目录下面的主要文件目录下面也简单介绍一下:1、usr 用户文件夹,包含共享、键盘布局、时间区域文件等2、app 常规下载的应用程序,这些apk 包都是受保护的哦3、lib 系统底层库,如平台运行时库等4、etc 系统的配置文件,比如APN接入点设置等核心配置等5、framework Android 系统平台核心framework 的文件6、build.prop Android 系统属性配置文件7、xbin 常用开发工具,比如tcpdump/sqlite3 等8、bin 系统工具,比如ps/cp/pm 等一、SD卡中1. /mnt/sdcard或者/sdcard这是Android手机中SD卡的文件夹路径,其中/mnt/sdcard/是android 2.2或更高版本所使用的,而/sdcard是android 2.1或早期版本的存储卡位置。
android openfileoutput 用法
android openfileoutput 用法Android openFileOutput 用法什么是 openFileOutputopenFileOutput方法是 Android 提供的一个文件写入方法,用于在 Android 应用程序的私有目录中创建或打开一个文件。
用法以下是一些常见的openFileOutput用法:•创建一个新文件并写入内容•打开一个已有文件并进行写入操作•以追加模式打开一个文件•使用MODE_PRIVATE和MODE_APPEND权限模式•使用 try-with-resources 结构自动关闭输出流创建一个新文件并写入内容可以使用openFileOutput方法创建一个新文件,并使用输出流将内容写入文件。
下面是一个示例:String filename = "";String content = "Hello world!";try {FileOutputStream fos = openFileOutput(filename, MODE _PRIVATE);(());();} catch (IOException e) {();}打开一个已有文件并进行写入操作可以使用openFileOutput方法打开一个已有文件,并使用输出流将内容写入文件。
下面是一个示例:String filename = "";String content = "Hello world!";try {FileOutputStream fos = openFileOutput(filename, MODE _PRIVATE);(());();} catch (IOException e) {();}以追加模式打开一个文件可以使用MODE_APPEND权限模式以追加模式打开一个文件,并在已有内容后面添加新的内容。
下面是一个示例:String filename = "";String content = "Hello again!";try {FileOutputStream fos = openFileOutput(filename, MODE _APPEND);(());();} catch (IOException e) {();}使用MODE_PRIVATE和MODE_APPEND权限模式可以使用MODE_PRIVATE权限模式创建一个私有文件,并使用MODE_APPEND权限模式在文件中追加内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
But t o n弹出显示文件夹选择框 T e xt Vie w就是用来显示当前选择的文件夹路径
[ c-sh a r p ]
01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
<?xml version= " 1.0" encoding = " utf-8" ?> <LinearLayout xmlns:android= " /apk/res/android" android:layout_width= " 250px" android:layout_heig ht= " 400px" android:orientation= " vertical" android:backg round= " @ drawable/white" > <T extView android:id= " @ +id/mPath" android:layout_width= " wrap_content" android:layout_heig ht= " wrap_content" android:padding = " 5px" android:textSiz e= " 18sp" android:textColor= " @ drawable/blue" > </T extView> <ListView android:id= " @ android:id/list" android:layout_width= " fill_parent" android:layout_heig ht= " 330px" > </ListView> <LinearLayout android:g ravity= " center" android:layout_width= " wrap_content" android:layout_heig ht= " wrap_content" android:orientation= " horiz ontal" android:backg round= " @ drawable/white" > <Button android:id= " @ +id/buttonConfirm" android:layout_width= " 125px" android:layout_heig ht= " fill_parent" android:text= " 确定" /> <Button android:id= " @ +id/buttonCancle" android:layout_width= " 125px" android:layout_heig ht= " fill_parent" android:text= " 取消" /> </LinearLayout> </LinearLayout>
18. 19. 20. 21. 22. 23.
android:textSiz e= " 20px" android:textColor= " #219ac6" android:layout_width= " fill_parent" android:layout_heig ht= " fill_parent" /> </LinearLayout>
<?xml version= " 1.0" encoding = " utf-8" ?> <LinearLayout xmlns:android= " /apk/res/android" android:layout_width= " fill_parent" android:layout_heig ht= " fill_parent" android:orientation= " vertical" android:backg round= " @ drawable/white" > <Button android:id= " @ +id/button" android:layout_width= " fill_parent" android:layout_heig ht= " wrap_content" android:text= " 选择文件" /> <T extView android:id= " @ +id/fileT ext" android:g ravity= " center" android:textSiz e= " 20px"
列表显示 It e m 通过布局文件 file _ro w.xm l
[ c-sh a r p ]
01. 02. 03. 04.
<?xml version= " 1.0" encoding = " utf-8" ?> <LinearLayout xmlns:android= " /apk/res/android" android:orientation= " horiz ontal"
public class MainAcivity extends Activity{ public static final int FILE_RESULT _CODE = 1; private T extView textView; @ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(yout.main); Button button = (Button)findViewById(R.id.button); textView = (T extView)findViewById(R.id.fileT ext); button.setOnClickListener( new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainAcivity. this ,MyFileManag er. class ); startActivityForResult(intent, FILE_RESULT _CODE); } }); } @ Override protected void onActivityResult( int requestCode, int resultCode, Intent data) { if (FILE_RESULT _CODE == requestCode){ Bundle bundle = null ; if (data!= null &&(bundle=data.g etExtras())!= null ){ textView.setT ext( " 选择文件夹为:" +bundle.g etString ( " file" )); } } } }
[ c-sh a r p ]
01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
这里通过 st art Act ivit yFo rRe sult () 弹出的 Act ivit y 所以要重写 o nAct ivit yRe sult 方法 在目标 Act ivit y调用方法 finish() 的时候会回调 这里需要注意在按返回键时也会调用该方法 所以这里还需要判空 然后再 MyFile Manage r 这个 Act ivit y中通过 List Vie w来显示文件列表 布局文件 file se le ct .xm l
Android----弹 出 框 选 择 文 件 夹 目 录 以 及 启 用 新 的 Task打 开 文 件
首先看效果图
第一个 Act ivit y很简单就是一个按钮 But t o n 加一个 T e xt Vie w 见 m ain.xm l
[ c-sh a r p ]
01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16.08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
android:orientation= " horiz ontal" android:layout_width= " fill_parent" android:layout_heig ht= " fill_parent" android:backg round= " #ffffff" > <LinearLayout android:orientation= " horiz ontal" android:layout_width= " fill_parent" android:layout_heig ht= " fill_parent" android:backg round= " @ drawable/listview_selected" android:padding = " 6px" > <Imag eView android:id= " @ +id/icon" android:layout_width= " 30dip" android:layout_heig ht= " 30dip" > </Imag eView> <T extView android:id= " @ +id/text" android:layout_g ravity= " center_horiz ontal" android:layout_width= " fill_parent" android:layout_heig ht= " wrap_content" android:textColor= " @ drawable/black" > </T extView> </LinearLayout> </LinearLayout>