我在登录屏幕上检查所需的权限.对话框显示要求我需要的4个权限.一切都很好,但是当对话框出现时,背景变黑,我的应用程序关闭(不会崩溃,只是关闭).当我完成选择权限后,我再次打开应用程序并继续从停止的位置运行.在显示权限对话框时,如何让应用程序继续运行?我使用一个检查权限的类,并在登录活动中调用它.
班级:
public abstract class RuntimePermissionsActivity extends AppCompatActivity {
private SparseIntArray mErrorString;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mErrorString = new SparseIntArray();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
int permissionCheck = PackageManager.PERMISSION_GRANTED;
for (int permission : grantResults){
permissionCheck = permissionCheck + permission;
}
if ((grantResults.length>0) && permissionCheck == PackageManager.PERMISSION_GRANTED){
onPermissionsGranted(requestCode);
}
else {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(intent);
}
}
public void requestAppPermissions(final …Run Code Online (Sandbox Code Playgroud) 我正在测试我的应用程序Marshmallow 6.0,它正在关闭android.permission.READ_EXTERNAL_STORAGE,即使已经在Manifest中定义了它.在某处我读过,如果我在运行时请求权限,那么它就不会强行关闭你的应用程序.我也读过这个android文档,用于请求运行时权限.
所以,我开始知道我们可以请求android文档中提到的下面的权限.
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS); …Run Code Online (Sandbox Code Playgroud) 这种新的和令人敬畏的安全功能是RUN-TIME Permission
我正在努力理解它并为此制作一个演示但是我想到的一个问题是当我处理DIALOG的用户许可时.
如何处理" 永不再问 "
假设我的应用程序必须需要位置/联系人,但用户拒绝它"不要再问".
我能做些什么?并非所有用户都了解我的字段是必需的.
有什么建议吗?
android android-alertdialog android-permissions android-6.0-marshmallow
如果用户在授予设置后撤消设置中的权限,是否有办法获得回调?
我知道在尝试使用相机等之前我们必须检查权限.
考虑以下场景,我有一个视频处理应用程序需要读取和写入存储的权限.处理任务通常是几秒钟.假设用户在被要求时给予权限并在处理开始后撤消它们.在这种情况下有没有办法我们可以获得回调而不是每次检查?这样我们就可以优雅地处理错误案例.
Android Marshmallow中是否有任何方法可以进行权限状态更改检测?
我还没看过广播......
我正在尝试创建一个文件。(testipfs文件夹已存在)
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "testipfs");
File photo= new File(imagesFolder, "desktopWallpaper.jpg");
System.out.println("Saving file in "+photo.getAbsolutePath());
if (!photo.exists()) {
try {
photo.createNewFile();
} catch (IOException e) {
System.out.println("Failed to create photo");
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但出现错误操作不允许。
I/System.out: Saving file in /storage/emulated/0/testipfs/desktopWallpaper.jpg
I/System.out: Failed to create photo
W/System.err: java.io.IOException: Operation not permitted
W/System.err: at java.io.UnixFileSystem.createFileExclusively0(Native Method)
at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
at java.io.File.createNewFile(File.java:1008)
at com.example.ipfs.MainActivity.SavePhotoTask(MainActivity.java:49)
at com.example.ipfs.MainActivity.onCreate(MainActivity.java:112)
Run Code Online (Sandbox Code Playgroud)
我在清单文件中添加了权限,如下所示
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我无法在这里找到解决我正在尝试创建的 Android 文件管理器应用程序上的读/写问题的方法。在真实设备上运行时,我无法从 SD 卡中删除文件。
谁能指导我,我做错了什么以及如何修复权限?
我已经添加了读/写权限 AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
但无论如何,我收到此错误消息:
avc: denied { read } for name="/" dev="rootfs" ino=1 scontext=u:r:untrusted_app
Run Code Online (Sandbox Code Playgroud)
对于我正在使用的依赖项:
compile 'org.apache.directory.studio:org.apache.commons.io:2.4'
Run Code Online (Sandbox Code Playgroud)
完整的日志猫:
02-28 10:59:49.740 12067-12067/? W/art: Unexpected CPU variant for X86 using defaults: x86_64
02-28 10:59:49.765 12067-12067/? W/System: ClassLoader referenced unknown path: /data/app/com.example.filemanager-1/lib/x86_64
02-28 10:59:49.770 12067-12067/? I/InstantRun: Instant Run Runtime started. Android package is com.example.filemanager, real application class is com.example.filemanager.FileManager.
02-28 10:59:49.797 12067-12074/? E/art: Failed writing handshake bytes (-1 of 14): Broken pipe
02-28 10:59:49.797 12067-12074/? …Run Code Online (Sandbox Code Playgroud) 我的代码行有问题:
String path = MediaStore.Images.Media.insertImage(activity.getContentResolver(), bitmap, "feedback", null);
Run Code Online (Sandbox Code Playgroud)
Activity不为null,位图不为null.
我收到错误:
0-22 11:23:59.644 29514-29527/? E/DatabaseUtils: Writing exception to parcel
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=1380, uid=10136 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.content.ContentProvider.enforceWritePermissionInner(ContentProvider.java:679)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.content.ContentProvider$Transport.enforceWritePermission(ContentProvider.java:494)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.content.ContentProvider$Transport.insert(ContentProvider.java:258)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:163)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.os.Binder.execTransact(Binder.java:453)
10-22 11:23:59.645 1380-1467/? E/MediaStore: Failed to insert image
10-22 11:23:59.645 1380-1467/? E/MediaStore: java.lang.SecurityException: Permission …Run Code Online (Sandbox Code Playgroud) 使用一些非常简单的android代码我试图根据以下逻辑访问一个文件夹:
public void try_to_navigate_local_dir(){
Environment e = new Environment();
ArrayList<String> filesList = new ArrayList<String>();
String sd_card = Environment.getExternalStorageDirectory().toString() + "/subdir_x";
File file = new File( sd_card ) ;
File list[] = file.listFiles();
for( int i=0; i< list.length; i++) {
filesList.add( list[i].getName() );
}
}
Run Code Online (Sandbox Code Playgroud)
凡subdir_x由我的手机上其他应用程序创建的.
我可以使用文件管理器查看这些文件夹,但是当我尝试时,我的代码返回null file.listFiles().
我如何访问这些文件?
我试图从存储中读取图像路径,我在这里继续获取SecurityException:
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=31409, uid=10053 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
Run Code Online (Sandbox Code Playgroud)
我正在编译反对api 23并且在我的Manifest中明确说明了我的Manifest的直接子项.我也理解新的运行时权限声明,当您想要访问存储时,您必须在运行时请求权限.当我写这行开始检查权限时,我得到一个无法在IDE中解决的问题:
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
Run Code Online (Sandbox Code Playgroud)
无法解析符号Manifest.permission.READ_EXTERNAL_STORAGE.我可以在我的代码中明确说明的唯一Manifest.permission是Manifest.permission.C2D_MESSAGE而没有得到无法解决的错误.还有其他我需要编译才能访问代码中的其他权限吗?
要清楚这是给我SecurityException的代码块:
public List<String> getCameraImagesFull(Context context) {
Cursor cursor = null;
String[] star = {"*"};
ArrayList<String> result = new ArrayList<>();
cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, star, null, null, MediaStore.MediaColumns.DATE_ADDED + " DESC");
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
result.add(path);
} while (cursor.moveToNext());
}
cursor.close();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
这是抛出异常的行:
cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, star, …Run Code Online (Sandbox Code Playgroud) android mediastore android-permissions android-6.0-marshmallow