前言:
需求要求安裝三方應(yīng)用ExternalCacheDir()下載下來的apk文件。
getExternalCacheDir() : /storage/emulated/0/Android/data/com../cache/
獲取訪問權(quán)限
如果手機(jī)安卓版本為Android10的時(shí)候,可以在AndroidManifest.xml中添加下列代碼
android:requestLegacyExternalStorage="true"
以此禁用分區(qū)存儲(chǔ),但這在Android11及以上版本不起作用。文章來源:http://www.zghlxwxcb.cn/news/detail-833891.html
root方式 (非root方式點(diǎn)這里)文章來源地址http://www.zghlxwxcb.cn/news/detail-833891.html
- 第一種:通過adb命令修改
adb shell
su
chmod -R 775 /storage/emulated/0/Android/data/packageName/
- 第二種:系統(tǒng)服務(wù)代碼
frameworks/base/services/core/java/com/android/service/***/***.java
//系統(tǒng)服務(wù)合適的地方添加安裝卸載應(yīng)用監(jiān)聽
private void registerForBroadcasts() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
intentFilter.addDataScheme("package");
mContext.registerReceiver(
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_PACKAGE_ADDED.equals(action)
||Intent.ACTION_PACKAGE_REPLACED.equals(action) ) {
Uri data = intent.getData();
String pkgName = data.getEncodedSchemeSpecificPart();
//添加安裝替換應(yīng)用監(jiān)聽
if("com.***.***".equals(pkgName)){
//更新系統(tǒng)屬性
SystemProperties.set("persist.sys.***", "true");
}
} else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
if (!intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
Uri data = intent.getData();
String ssp;
if (data != null && (ssp = data.getSchemeSpecificPart()) != null) {
String unPkgName = data.getEncodedSchemeSpecificPart();
//添加移除卸載應(yīng)用監(jiān)聽
if("com.***.***".equals(unPkgName)){
//更新系統(tǒng)屬性
SystemProperties.set("persist.sys.***", "false");
}
}
}
}
}
}, intentFilter);
}
system/core/rootdir/init.rc
#init.rc添加屬性監(jiān)聽chmod改變權(quán)限
on property:persist.sys.*** = true
chmod 0775 /storage/emulated/0/Android/data/packageName/
chmod 0775 /storage/emulated/0/Android/data/packageName/cache
chmod 0775 /storage/emulated/0/Android/data/packageName/cache/*.apk
- 第三種:系統(tǒng)服務(wù)代碼
//在系統(tǒng)安裝應(yīng)用接口中添加
if(!TextUtils.isEmpty(filePath)){
if(filePath.startsWith("/storage/emulated/0/Android/data/com.***.***/")){
try {
String command = "chmod -R 775 /storage/emulated/0/Android/data/com..***.***/";
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}
到了這里,關(guān)于Android 11 訪問 Android/data/或者getExternalCacheDir() root方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!