应用安装
1 | import android.app.Activity; |
打开APP
1 | public static void openApp(Activity activity,String packageName){ |
应用安装卸载监听
静态注册
新建监听类:BootReceiver继承BroadcastReceiver
1 | import android.content.BroadcastReceiver; |
修改AndroidManifest.xml配置文件,添加广播介绍,添加监听的权限
1 |
|
动态注册
1 | private BootReceiver installedReceiver; |
FileProvider
Android7及以上对文件权限
的管控抓的很严格。
需要在AndroidManifest.xml
里面对它进行声明一个ContentProvider
。
定义FileProvider
由于FileProvider提供了ContentURI的生成方法,所以我们无需在代码中定义写一个它的子类
name
属性是固定的。
authorities
可以自己定义,一般是包名字加上.fileprovider
。
exported
设置为false
,因为通常是拒绝外部直接访问的。
grantUriPermissions
需要为true
,需要授予临时的Uri权限。
1 | <manifest> |
假如我们APP的包名是cn.psvmc.myapp
,其中的android:authorities
就在包名的基础上添加.fileprovider
。
1 | <provider |
file_path.xml
需要建立在res目录下名为xml的目录下,xml目录需要自己建立。
paths
下可以包含一个或者多个子节点。
1 |
|
这个xml的作用在于为文件生成URI,
其中root-path
、files-path
、cache-path
这些标签代表父路径:
- root-path :
File("/")
- files-path :
Context.getFilesDir()
- cache-path :
context.getCacheDir()
- external-path :
Environment.getExternalStorageDirectory()
- external-files-path :
ContextCompat.getExternalFilesDirs(context, null)[0]
- external-cache-path :
ContextCompat.getExternalCacheDirs(context)[0]
- external-media-path :
context.getExternalMediaDirs()[0]
path属性代表子路径,name代表为”父路径/子路径”起的名字,
1 | <files-path name="files" path="images/" /> |
路径对应关系
创建file_paths.xml
文件
1 |
|
我们还可以在path中用.
代替所有目录。
1 | //文件路径 |
观察我们生成的Uri示例,上边是我们普通的fileUri下边是我们生成的ContentUri,区别就在于ContentUri没有暴露具体的文件路径。
fileUri地址构成
file://
+文件的全路径
ContentUri地址构成
content://
+android:authorities的值
/paths中匹配的名称
/应用名称
例如:
1 | //普通的fileUri(通过Uri.fromFile(file)获取) |
APP的安装
1 | //文件路径 |