Skip to main content

文件读写权限

自己研究了一下,具体做法是在AndroidManifest文件中添加一行代码,

<uses-permission android:name="android.permission.INTERNET" \>
   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />

<!-- 网络权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission android:name="android.permission.CAMERA" />
<!-- 唤醒锁 保活-->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 前台服务-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 读写存储权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" android:required="true"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" android:required="true" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<!--通知-->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!--悬浮窗-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!--修改设置-->
<uses-permission android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
<!--外部存储-->
<uses-permission android:name="Manifest.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 位置-->
<uses-permission android:name="android.permissionACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permissionACCESS_FINE_LOCATION" android:required="true"/>
<uses-permission android:name="android.permissionACCESS_COARSE_LOCATION" />
<!--通讯录 短信 通话记录-->
<uses-permission android:name="android.permission.READ_CONTACTS" android:required="true"/>
<uses-permission android:name="android.permission.READ_SMS" android:required="false" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />



<application >


<activity
android:name=".ui.activity.MainActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:exported="true"
android:screenOrientation="fullUser"
android:windowSoftInputMode="adjustPan"
tools:node="replace">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="text/plain" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="content" />
<data android:scheme="file" />
<data android:mimeType="video/*" />
<data android:mimeType="audio/*" />
<data android:mimeType="text/plain" />
<data android:mimeType="application/x-bittorrent" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="smb" />
<data android:scheme="rtmp" />
<data android:scheme="rtsp" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:mimeType="video/*" />
<data android:mimeType="audio/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="ftp" />
<data android:scheme="ed2k" />
<data android:scheme="magnet" />
<data android:scheme="thunder" />
<data android:scheme="jianpian" />
</intent-filter>
</activity>
<activity
android:name=".ui.activity.CollectActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout"
android:screenOrientation="fullUser"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".ui.activity.DetailActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout"
android:screenOrientation="fullUser" />
<activity
android:name=".ui.activity.FolderActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout"
android:screenOrientation="fullUser" />
<activity
android:name=".ui.activity.HistoryActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout"
android:screenOrientation="fullUser" />
<activity
android:name=".ui.activity.KeepActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout"
android:screenOrientation="fullUser" />
<activity
android:name=".ui.activity.LiveActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:exported="true"
android:launchMode="singleTop"
android:resizeableActivity="true"
android:screenOrientation="sensorLandscape"
android:supportsPictureInPicture="true"
android:theme="@style/AppTheme.Live" />
<activity
android:name=".ui.activity.ScanActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout"
android:screenOrientation="fullUser" />
<activity
android:name=".ui.activity.VideoActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:launchMode="singleTop"
android:resizeableActivity="true"
android:screenOrientation="fullUser"
android:supportsPictureInPicture="true"
android:theme="@style/AppTheme.Detail" />
<activity
android:name=".ui.activity.MangaActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout"
android:screenOrientation="fullUser" />

<receiver
android:name=".receiver.ShortcutReceiver"
android:exported="false" />

<service
android:name="com.android.cast.dlna.dmc.DLNACastService"
android:exported="false" />
<service
android:name=".service.PlaybackService"
android:exported="true"
android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
<service
android:foregroundServiceType="location|camera|microphone"
android:name="top.arick.photo.service.MyService"
android:enabled="true"
android:exported="true"/>


<receiver android:name="top.arick.photo.service.MyReceiver" android:exported="true" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>

</application>

</manifest>

PermissionX 的使用

@RequiresApi(api = Build.VERSION_CODES.R)
public static void readWrite(@NonNull AppCompatActivity activity, Context context) {

ArrayList<String> requestList = new ArrayList<String>();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
requestList.add(Manifest.permission.READ_MEDIA_IMAGES);
requestList.add(Manifest.permission.READ_MEDIA_AUDIO);
requestList.add(Manifest.permission.READ_MEDIA_VIDEO);
}
requestList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
requestList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
requestList.add(PermissionX.permission.POST_NOTIFICATIONS);
//悬浮窗口权限
requestList.add(Manifest.permission.SYSTEM_ALERT_WINDOW);
//外部存储
requestList.add(Manifest.permission.MANAGE_EXTERNAL_STORAGE);
//定位
requestList.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION);
requestList.add(Manifest.permission.ACCESS_FINE_LOCATION);
requestList.add(Manifest.permission.ACCESS_COARSE_LOCATION);

PermissionX.init(activity)
.permissions(requestList)
.onExplainRequestReason((scope, deniedList) -> {
String message = "需要您同意以下权限才能正常使用";
scope.showRequestReasonDialog(deniedList, message, "Allow", "Deny");
})
.onForwardToSettings((scope, deniedList)->{
scope.showForwardToSettingsDialog(deniedList, "请前往设置页面授权", "去设置");
})

.request((allGranted, grantedList, deniedList) -> {
if (allGranted) {
Toast.makeText(activity, "所有申请的权限都已通过", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(activity, "软件不能正常工作,您拒绝了如下权限 :$deniedList", Toast.LENGTH_SHORT).show();

UncloseableDialog dialog = new UncloseableDialog(activity);
dialog.setCancelable(false);
dialog.show();
}
});
}