android 写文件权限 manifest.xml配置

本文详细介绍了在Android应用中如何进行文件读写操作,并阐述了Android系统的文件权限管理机制,包括如何获取权限、私有数据的访问限制以及如何通过Activity提供的方法来访问程序私有的文件和数据。

首先,在manifest.xml中添加user permission:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

代码中,
             String path = "http://192.168.1.22:8088/4";
            URL url = new URL(path);
            URLConnection cn = url.openConnection();
            cn.connect();
            InputStream stream = cn.getInputStream();
            if (stream == null)
                throw new RuntimeException("stream is null");
            File temp = new File("/data/data/com.dilifetech/mediaplayertmp");//com.dilifetech是package name
            temp.createNewFile();
            String tempPath = temp.getAbsolutePath();
            FileOutputStream out = new FileOutputStream(temp);
            byte buf[] = new byte[128]; 
            do {
                int numread = stream.read(buf);
                if (numread <= 0)
                    break;
                out.write(buf, 0, numread);
                } while (true);
            mp.setDataSource(tempPath);
            stream.close();

android系统中的文件权限:
Android有一套自己的安全模型, 具体可参见Android开发文档。当应用程序(.apk)在安装时就会分配一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下 ,任何应用创建的文件,数据库, sharedpreferences都应该是私有的(位于/data/data/your_project/files/),其余程序无法访问。除非在创建时指明是MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE,只要这样其余程序才能正确访问。

因为有这种Android读写文件的方法在安全上有所保障,进程打开文件时Android要求检查进程的user id。所以不能直接用java的api来打开,因为java的io函数没有提这个机制 。无法用java的api直接打开程序私有的数据 ,默认路径为/data/data/your_project/files/

FileReader file = new FileReader("Android.txt"); 

这里特别强调私有数据!言外之意是如果某个文件或者数据不是程序私有的,既访问它时无须经过Android的权限检查,那么还是可以用java的io api来直接访问的。所谓的非私有数据是只放在sdcard上的文件或者数据,可以用java的io api来直接打开sdcard上文件。

FileReader file = new FileReader("/sdcard/Android.txt"); 

如果要打开程序自己私有的文件和数据,那必须使用Activity提供openFileOutput和openFileInput方法。

创建程序私有的文件,由于权限方面的要求,必须使用activity提供的Android读写文件方法

FileOutputStream os = this.openFileOutput("Android.txt", MODE_PRIVATE);  OutputStreamWriter outWriter = new OutputStreamWriter (os); 

读取程序私有的文件,由于权限方面的要求,必须使用activity提供的方法

FileInputStream os =this.openFileInput("Android.txt");  InputStreamReader inReader = new InputStreamReader(os);
<think>我们正在讨论Android Manifest.xml的作用。根据引用内容,我们可以总结出以下几点: 1. 它是每个Android程序必须的文,位于项目根目录(引用[1])。 2.配置程序运行所必要的组权限以及相关信息(引用[1])。 3. 它是整个应用的入口(引用[1])。 4. 它还涉及到反编译和重新编译(引用[2]),以及在不同环境下配置(如不同图标等)(引用[4])。 此外,引用[3]提到了repo的manifest.xml,但这是用于管理多个代码仓库的,与Android应用中的Manifest.xml不同,因此我们主要关注引用[1][2][4]。 因此,我们可以将Android Manifest.xml的作用归纳如下: ### 作用 1. **声明应用程序的组**:包括活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供者(Content Provider)。每个组都必须在该文中声明,否则系统无法识别和启动它们。 2. **声明应用程序的基本信息**:如应用程序的包名(唯一标识)、版本号、图标、主题等。 3. **声明应用程序所需的权限**:包括应用自身需要使用的权限(如访问网络、读取联系人等)以及声明其他应用访问该应用组时所需的权限。 4. **声明应用程序兼容的硬和软特性**:例如,指定应用需要哪些硬特性(如摄像头)或最低Android版本。 5. **指定应用程序的入口点**:例如,指定启动应用时首先启动哪个Activity(通常带有`<intent-filter>`标签,其中包含`MAIN`动作和`LAUNCHER`类别的Activity)。 6. **声明应用程序支持的应用链接(Deep Links)**:通过配置Intent Filter,可以使得应用能够响应特定的URL或动作。 7. **声明应用程序的元数据**:例如,Google Maps API密钥、Firebase配置等可以通过`<meta-data>`标签设置。 ### 不同环境下的配置 引用[4]提到,在不同环境下(如开发环境和生产环境),可能需要配置不同的应用图标(icon)或其他属性。这可以通过在build.gradle中配置不同的productFlavors,并在AndroidManifest.xml中使用占位符来实现,然后在构建时替换。 例如,在build.gradle中: ```groovy android { productFlavors { dev { manifestPlaceholders = [appIcon: "@mipmap/ic_launcher_dev"] } prod { manifestPlaceholders = [appIcon: "@mipmap/ic_launcher_prod"] } } } ``` 然后在Manifest.xml中: ```xml <application android:icon="${appIcon}" ...> ... </application> ``` ### 反编译与重新编译 引用[2]提到,可以通过工具对AndroidManifest.xml进行反编译和重新编译。这通常发生在对APK进行修改时,例如修改权限、组声明等,然后重新打包签名。 ### 总结 AndroidManifest.xmlAndroid应用的配置,它定义了应用的基本信息、组权限、入口点等,是整个应用运行的基础。 §§相关问题§§ 1. 如何在AndroidManifest.xml中声明一个新的Activity? 2. 如何为Android应用申请权限?请举例说明。 3. 如何配置应用支持深链接(Deep Link)? 4. 如何在不同构建变体(Build Variant)中修改AndroidManifest.xml的属性(如图标)?</think>### Android Manifest.xml的作用 Android Manifest.xml 是每个 Android 应用的核心配置,位于项目根目录,主要作用包括: 1. **声明应用组** 注册四大核心组- 活动(`Activity`):用户界面 - 服务(`Service`):后台任务 - 广播接收器(`BroadcastReceiver`):系统事响应 - 内容提供者(`ContentProvider`):数据共享 例如:`<activity android:name=".MainActivity">` 2. **权限管理** - 声明应用所需权限(如摄像头、位置访问) - 定义其他应用访问本组权限 示例:`<uses-permission android:name="android.permission.CAMERA"/>` 3. **应用基本信息** 配置包名(唯一标识)、版本号、图标、主题等元数据: ```xml <manifest package="com.example.app"> <application android:icon="@mipmap/ic_launcher" ...> ``` 4. **入口点指定** 通过 `Intent-Filter` 标记启动入口: ```xml <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> ``` 5. **硬/软特性声明** 指定最低 API 级别和硬要求(如陀螺仪): ```xml <uses-sdk android:minSdkVersion="21"/> <uses-feature android:name="android.hardware.sensor.gyroscope"/> ``` 6. **多环境配置支持** 通过构建变体(如开发/生产环境)动态修改属性(如图标、API 密钥)[^4]: ```groovy // build.gradle productFlavors { dev { manifestPlaceholders = [appIcon: "@mipmap/ic_dev"] } prod { manifestPlaceholders = [appIcon: "@mipmap/ic_prod"] } } ``` ```xml <!-- Manifest.xml --> <application android:icon="${appIcon}" ...> ``` 7. **安全控制** 通过 `android:exported` 属性限制组外部访问: ```xml <service android:name=".MyService" android:exported="false"/> ``` > 提示:修改后需重新编译 APK 并签名才能生效[^2],跨仓库管理可使用 `<include>` 引入其他配置[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值