声明READ_EXTERNAL_STORAGE权限,Android Q及以上版本必须使用MediaStore API访问公共目录文件。...values); try (OutputStream os = getContentResolver().openOutputStream(uri)) {...image.getHeight(); // 更新纵向位置 } } return result; // 返回拼接后的图片 } } 绘制过程 创建一个新的空白...Bitmap,大小为之前计算的总尺寸 使用Canvas在这个Bitmap上绘制所有输入图片 根据拼接方向,依次将每张图片绘制到正确的位置 更新当前位置指针(currentPos),以便下一张图片绘制在正确的位置..., values); try (OutputStream os = getContentResolver().openOutputStream(uri)) {
App运行模式 在Android 11版本上,系统会根据App targetSdkVersion决定运行模式: ● App targetSdkVersion >= 30,默认为分区存储,并且无法取消。... getContentResolver().openOutputStream(uri); ■ 获取可写ParcelFileDescriptor getContentResolver...上述列出了 Android 10(API 级别 29)中列入灰名单而目前在 Android 11 中受限的所有非 SDK 接口。...3.13 APK签名方案v2要求 1 背景 如果您的应用以Android 11(API级别30)为目标平台,且目前仅使用APK签名方案v1签名,现在需要在v1签名的基础上还必须使用APK签名方案v2或更高版本进行签名...2 兼容性影响 用户无法在搭载Android 11的设备上安装或更新仅通过APK签名方案v1 签名的应用。
背景 最近在项目中着手做Android10和Android11 适配时候,期间遇到了不少的坑。之前有专门写过qq、微信分享的适配。但是此次在针对偏业务侧适配工作的时候还是碰到了一些新的问题。...但是,这里有个坑: 在Android10上不行,在Android11上又可以!!为什么? 因为Google改回来了,让Android11支持file://格式了。。。。 (wtf?...在Android11上 以上标志会自动失效。因此,应用存储的东西还在放在App-specific目录下。分享私有目录可以通过fileprovider 方式适配。...最后,我还想问两个问题: 1. targetSdk=30,android:requestLegacyExternalStorage="false"运行在Android10的设备上 会咋么样?...2. targetSdk=30,android:requestLegacyExternalStorage="false"运行在Android11的设备上 会咋么样?
App运行模式 在Android 11版本上,系统会根据App targetSdkVersion决定运行模式: ● App targetSdkVersion >= 30,默认为分区存储,并且无法取消...getContentResolver().openOutputStream(uri); ■ 获取可写ParcelFileDescriptor getContentResolver...上述列出了 Android 10(API 级别 29)中列入灰名单而目前在 Android 11 中受限的所有非 SDK 接口。...3.13 APK签名方案v2要求 1 背景 如果您的应用以Android 11(API级别30)为目标平台,且目前仅使用APK签名方案v1签名,现在需要在v1签名的基础上还必须使用APK签名方案v2...2 兼容性影响 用户无法在搭载Android 11的设备上安装或更新仅通过APK签名方案v1 签名的应用。
在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。...创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下: 在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard...因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。...Android 中使用 SQLite 数据库管理工具 在其他数据库上作开发,一般都使用工具来检查和处理数据库的内容,而不是仅仅使用数据库的 API。..._data的字段,_data字段列出了该文件在Android文件系统上的精确路径。
在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。...因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。...Android 中使用 SQLite 数据库管理工具 在其他数据库上作开发,一般都使用工具来检查和处理数据库的内容,而不是仅仅使用数据库的 API。...下面的记录用来删除设备上所有的联系人信息: private void deleteRecords() { Uri uri = People.CONTENT_URI; getContentResolver..._data的字段,_data字段列出了该文件在Android文件系统上的精确路径。
scanUri = getContentResolver().insert(MediaStore.getMediaScannerUri(), values); Uri uri = Uri.parse...方法从2.2(API 8)开始引入。...创建一个MediaScannerConnection对象然后调用scanFile方法 很简单,参考http://developer.android.com/reference/android/media...为什么发送MEDIA_SCANNER_SCAN_FILE广播不生效 关于为什么有些设备上不生效,很多人认为是API原因,其实不是的,这其实和你传入的文件路径有关系。...我倒是希望可以,但是实际上是不工作的,查看如下代码即可明白。
随着Android系统版本不断地迭代更新,每个版本中都会加入很多新的API进去,但是新增的API在老版系统中并不存在,因此这就出现了一个向下兼容的问题。...MediaStore API在共享目录指定目录下创建文件或者访问应用自己创建文件,不需要申请存储权限 MediaStore API访问其他应用在共享目录创建的媒体文件(图片、音频、视频), 需要申请存储权限...,未申请存储权限,通过ContentResolver查询不到文件Uri,即使通过其他方式获取到文件Uri,读取或创建文件会抛出异常; MediaStore API不能够访问其他应用创建的非媒体文件(pdf...主要是在公共目录下创建文件或文件夹拿到本地路径uri,不同的Uri,可以保存到不同的公共目录中。...:maxSdkVersion="28"/> 3.2 Mac地址随机分配 从Android10开始,默认情况下,在搭载 Android 10 或更高版本的设备上,系统会传输随机分配的 MAC 地址。
低版本中不能使用分区存储 API 操作文件 , 【错误记录】Android 低版本使用分区存储错误 ( IllegalArgumentException:no path was provided when...系统自动创建的文件是一个目录文件 , 向其中写出 “Hello World” 文本数据 , 即可完成相关文件创建 ; 通过返回的 Uri 打开输出流 , 向文件中写出数据 : // 向...11 系统的模拟器 , 然后部署该应用 , 文件创建成功 ; 三、完整代码示例 ---- 1、MainActivity 核心代码 package kim.hsl.file import android.Manifest...11 中创建文件 createFile() }else{ // 分支二 : 如果没有上述权限 , 那么申请权限...* 在 Download 目录下创建 hello.txt */ fun createFile(){ // 操作 external.db 数据库
Uri uri= ContactsContract.Contacts.CONTENT_URI; Cursor cs=getContentResolver().query(uri, null, null...Uri uri= new Uri(ContactsContract.Contacts.CONTENT_URI); Cursor cs=getContentResolver().query(uri, null...Uri uri= ContactsContract.Contacts.CONTENT_URI; Cursor cs=getContentResolver().query(uri); while(cs.moveToNext...Uri uri= new Uri(ContactsContract.Contacts.CONTENT_URI); Cursor cs=getContentResolver().query(uri);...里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。
另外,存储在SD卡上的文件属于公有文件,所有的应用程序都有权随意访问,这也对数据的安全性带来了很大的挑战。 为了解决上述问题,Google在Android 10当中加入了作用域存储功能。...从Android 10开始,每个应用程序只能有权在自己的外置存储空间关联目录下读取和创建文件,获取该关联目录的代码是:context.getExternalFilesDir()。...当然,这只是一种权宜之计,在未来的Android系统版本中,这段配置随时都可能会失效(目前Android 11预览版已经确认,这段配置至少在Android 11上不会失效)。...将文件下载到应用程序的关联目录下,这样不用修改任何代码就可以让程序在Android 10系统上正常工作。...注意,上述代码只能在Android 10或更高的系统版本上运行,因为MediaStore.Downloads是Android 10中新增的API。
", ""); 25 getContentResolver().update(uri, values, "column1 = ?...ContentProvider类中有六个抽象方法,我们在使用子类继承它时,需要全部实现这六个方法: public boolean onCreate() :初始化的时候调用,通常在这里完成对数据库的创建和升级等操作...例如,如果你使用SQLite数据库,而且在onCreate()方法中创建了一个新的SQLiteOpenHelper对象,然后在首次打开数据时,创建SQL表。..." 29 android:authorities="com.jack.databasetest.provider" 30 android:exported...然后运行下项目,将DatabaseTest程序重写安装在模拟器上。接着关闭这个项目,并创建一个新项目ProviderTest,我们就通过这个程序去访问DatabaseTest中的数据。
Environment.isExternalStorageLegacy();//存储是否为兼容模式 在适配Android11的时候requestLegacyExternalStorage 标签会在Android11...MediaStore API 在共享目录指定目录下创建文件或者访问应用自己创建文件,不需要申请存储权限 MediaStore API 访问其他应用在共享目录创建的媒体文件(图片、音频、视频), 需要申请存储权限...,未申请存储权限,通过 ContentResolver 查询不到文件 Uri,即使通过其他方式获取到文件 Uri,读取或创建文件会抛出异常; MediaStore API 不能够访问其他应用创建的非媒体文件...问题分析: 在Android Q上,APP只允许在自身App-specific目录以内通过路径生成的文件。...问题分析2: 在Android Q上,修改公共目录文件,需要用户授权。
如果你想来调用这些ContentProvider就需要自行查阅相关的API资料了! 另外,不同的版本,可能对应着不同的URL!...; resolver.insert(uri, conValues); } 注意事项: 上述代码在4.4以下都可以实现写入短信的功能,而5.0上就无法写入,原因是: 从5.0开始,默认短信应用外的软件不能以写入短信数据库的形式发短信...://com.android.contacts/data"); ContentResolver resolver = getContentResolver(); ArrayList operations...接下来我们就来一步步实现: 在开始之前我们先要创建一个数据库创建类: DBOpenHelper.java public class DBOpenHelper extends SQLiteOpenHelper...使用指南: 运行程序后,晾一边,收到短信后,可以在logcat上看到该条信息的内容,可以根据自己的需求 将Activtiy改做Service,而在后台做这种事情~ 小结 关于ContentProvider
官方的API中,android.provider.Settings.Secure类有2个静态方法: public static final void setLocationProviderEnabled...Level 8(即Android 2.2)才开始提供,那么在2.2之前又该如何编程实现GPS的开关呢?...由于我的机器上的android source是2.3版本的,所以直接启动了一个2.1的模拟器,用adb pull将Settings.apk抓下来,反编译之后,在SecuritySettings类中找到如下代码...说到做到,在Activity中添加如下方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 private void toggleGPS() { Intent gpsIntent =...这1方法在Android官方的Wiki上已经有人提出了,详情请见:Issue 7890。但可能是2.1版本已经古旧不再维护的原因,官方并未进行任何的Fix。
用户在 Calendar 应用中完成交互后,将返回初始的应用中。 这样发起方应用就不必申请相应权限,也不需要提供浏览和创建事件的用户界面了。...为此,在使用这些 API 时,必须注意以下几点: 插入、更新和查询日程事件。 如果要直接插入、修改和查询 Calendar Provider 中的事件数据,需要获得合适的权限。...这时就可以通过 Intent,把读写操作交给 Android 内置 Calendar 应用去完成。 在使用这些 Intent 时,用户会被带入 Calendar 应用,在预置的表单中进行操作。...MINUTES 在事件发生之前多少分钟进行提醒。 METHOD 提醒方式,这是服务器上的设置。...下面给出了一段代码,在2012年1月1日安排一个事件,时间是上午7:30到8:30。 请留意代码中的以下内容: 用 Events.CONTENT_URI 定义了 Uri。
使用ContentProvider(内容提供者)共享数据 ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问...数据的访问方式会因数据存储的方式而不同,导致数据的访问方式无法统一,如:采用xml文件对外共享数据,需要进行xml解析才能读取数据;采用sharedpreferences共享数据,需要使用sharedpreferences API...UriMatcher类用于匹配Uri,它的用法如下: 首先第一步把你需要匹配Uri路径全部给注册上,如下: //常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码 UriMatcher...创建后就会被调用, Android开机后, ContentProvider在其它应用第一次访问它时才会被创建。...发生数据变化时调用getContentResolver().notifyChange(uri, null)来通知注册在此URI上的访问者,例子如下: public class PersonContentProvider
; } * 如果路径中带有数字,把数字提取出来的api int id = (int) ContentUris.parseId(uri); 01项目的MyOpenHelper...; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri...PersonProvider extends ContentProvider { private MyOpenHelper oh; SQLiteDatabase db; //创建...//发送数据改变的通知 //uri:通知发送到哪一个uri上,所有注册在这个uri上的内容观察者都可以收到这个通知 getContext...().getContentResolver().notifyChange(uri, null); } else if(um.match(uri) == 2){
概述 通过ContentProvider初探相信你已经知道如何去使用系统提供的ContentProvider或者自定义ContentProvider了, 已经基本满足日常开发的需求了,有趣的是,我在官方文档上看到了另外这几个...)); } } } } 运行结果: 比如我们选中那只狗,然后Picker UI自己会关掉,然后Logcat上可以看到这样一个uri: ?...5)根据uri获取文件参数 核心代码如下: public void dumpImageMetaData(Uri uri) { Cursor cursor = getContentResolver...8) 创建新文件以及删除文件: 创建文件: private void createFile(String mimeType, String fileName) { Intent intent =...下面介绍自定义DocumentsProvider的步骤: API版本为19或者更高 在manifest.xml中注册该Provider Provider的name为类名加包名,比如: com.example.android.storageprovider.MyCloudProvider
一 ContentProvider基本介绍 ContentProvider是Android中的一个组件,用于在应用程序间共享数据。...三 ContentProvider常见属性及方法 常见属性(Attributes): android:authorities:用于在AndroidManifest.xml文件中指定ContentProvider...常见方法(Methods): onCreate():在创建ContentProvider时调用,通常用于执行初始化操作,如数据库的打开和连接等。...uri = getContentResolver().insert(MyContentProvider.CONTENT_URI, values); 更新数据: ContentValues values...学习曲线:使用ContentProvider需要掌握相关的API和概念,对开发者来说可能存在一定的学习曲线。