学习内容
- Google Android Training
http://developer.android.com/training/index.html - Github托管
https://github.com/kesenhoo/android-training-course-in-chinese - 中文阅读地址
http://hukai.me/android-training-course-in-chinese/index.html
以下是仅对我个人有意义的笔记
2. Android分享操作
2.1. 分享简单的数据
2.1.1. 给其他App发送简单的数据(举例系统级应用)
- 文本:Intent传值,配置一下Action,设置了chooser就可以显示可用的应用
- 二进制(图片):需要结合设置特定的MIME类型,需要在EXTRA_STREAM`里面放置数据的URI
- 多块内容:不同图片格式的话,应该是用image/*来匹配那些可以接收任何图片类型的activity
2.1.2. 接收从其他App返回的数据
- 接受传来的数据(想要获得这种接受资格就要在manifest里面设置)
- 处理接收到的数据:若数据量巨大,则需要大量处理时间,因此我们应避免在UI线程里面去处理那些获取到的数据。
2.1.3. 给ActionBar增加分享功能(不知道ToolBar是不是一样的)
写入menu 设置item属性
android:actionProviderClass="android.widget.ShareActionProvider"
- 在Activity里面设置ShareActionProvider
2.2. 分享文件
2.2.1. 建立文件分享
- 在manifest里面设置好provider,包括authority(该Authority针对于FileProvider所生成的content URI。本例中的Authority是“com.example.myapp.fileprovider”。)和xml文件(在“res/xml/”下创建文件filepaths.xml)
- 指定可共享目录路径:标签,内部存储目录;外部存储的目录;内部缓存目录。
2.2.2. 分享文件( 在activity中实现)
- 在manifest里面设置该Activity的属性
- 在Activity.class敲代码实现被调用的时候该做什么来获取来被选中的共享文件信息以及授权
- 共享出去
- 用onDoneClick 调用finish()方法结束,实现申请方onActivityResult的方法。
2.2.3. 请求分享一个文件
- 请求比被请求easy多了,就是发起一个startActivityForResult,在里面的intent写好具体要调用的限制,然后等着结果就好了
2.2.4. 获取文件信息
- 了解一下如何接收的代码就好了,没什么需要特别注意的
2.3. 使用NFC分享文件
2.3.1. 发送文件给其他设备(用Android Beam文件传输,16以后的API才可以使用)
编辑manifest生命需要用到的权限,NFC+READ_EXTERNAL_STORAGE,以及
<!--如果设置了android:required="false",则我们必须在代码中测试设备是否支持NFC和Android Beam文件传输。--> <uses-feature android:name="android.hardware.nfc" android:required="false" />
如何测试:PackageManager.hasSystemFeature()+参数FEATURE_NFC测试设备是否支持NFC;SDK_INT的值测试系统版本是否支持Android Beam文件
- 实现一个回调函数提供文件:NfcAdapter.CreateBeamUrisCallback
2.3.2. 接收其他设备的文件
manifest里面为activity添加标签
<!--该标签用来匹配从通知发出的Intent,这些Intent具有ACTION_VIEW这一Action。--> <action android:name="android.intent.action.VIEW" /> <!--该标签用来匹配不含有显式Category的Intent对象。--> <category android:name="android.intent.category.CATEGORY_DEFAULT" /> <!--该标签用来匹配一个MIME类型。仅仅指定那些我们的应用能够处理的类型。--> <data android:mimeType="mime-type" />
- manifest里面设置权限(放在哪儿→内存/外存上,就申请哪种)
- 获取拷贝文件的目录(File URI/Content URI):Activity 为了明确应该如何处理接收的Intent,我们要检查它的Scheme( mIntent.getData().getScheme())和Authority(Uri.getAuthority(),MediaStore.AUTHORITY表示可获取,其他表示可以显示与该Content URI相关联的数据,但是不要尝试去获取文件目录)