android - Android Loss 对 Service 的写入权限
问题描述
我浏览了很多试图找到答案,我正在尝试通过 Android 服务下载文件,我确实检查并授予 MainActivity 权限,并验证它是否已被授予。当我进入服务类时,应用程序只会被拒绝权限。
这是代码:
public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{
private static final int WRITE_REQUEST_CODE = 300;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView text = findViewById(R.id.text);
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (text.getText().toString().equals("Started")) {
text.setText("Stoped");
stopService(new Intent(MainActivity.this,DownloadService.class));
} else {
text.setText("Started");
startService(new Intent(MainActivity.this,DownloadService.class));
}
}
});
EasyPermissions.requestPermissions(this, getString(R.string.write_file), WRITE_REQUEST_CODE, Manifest.permission.READ_EXTERNAL_STORAGE);
if (EasyPermissions.hasPermissions(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_SHORT).show();
}
/* MARKED CODE
DownloadFile downloadFile;
downloadFile = new DownloadFile(getApplicationContext());
downloadFile.execute("<https link>");*/
}
@Override
public void onBackPressed() {
moveTaskToBack (true);
Toast.makeText(getApplicationContext(), "Move to Back", Toast.LENGTH_SHORT).show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
Log.d("app", "Permission has been granted");
Toast.makeText(getApplicationContext(), "Permission has been granted", Toast.LENGTH_SHORT).show();
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
Log.d("app", "Permission has been denied");
Toast.makeText(getApplicationContext(), "Permission has been denied", Toast.LENGTH_SHORT).show();
}
}
服务等级(仅相关部分):
public class DownloadService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (!EasyPermissions.hasPermissions(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(getApplicationContext(), "Permission Lost", Toast.LENGTH_SHORT).show();
}
// download file and get it's locat path
String msg = downloadFile.downloadFile(imagePATH);
}
主要活动确实没有服务权限!DownloadFile 是一个简单的类。
一些奇怪的行为,如果我在将 DownloadFile 更改为 AsyncTask 时执行 MARKD CODE,我确实设法下载和存储文件。与我切换回原始代码相比,服务还可以将文件写入存储。
这是怎么回事?
解决方案
推荐阅读
- html - bootstrap:为什么我的 col-sm-offset-3 不起作用
- javascript - Concat , Join 淘汰赛 observableArry
- python - 出现错误“TypeError:预期的字符串或类似字节的对象”
- python - 用同一个键合并两个字典
- android - 如何使用颤振在 Firebase 云 Firestore 中添加多个节点
- jquery - 一段时间后如何停止装载机?
- java - Java:无法使用 Angular 5 向后端发送 POST 请求
- python - 使用 Anaconda Prompt 为 Dolfin 安装 Fenics
- c# - Listview 排序组(C#、WPF)
- python - Robot Framework 中的静态变量