Articles of android permissions

在运行时授予用户权限后,Android 6.0需要重新启动

我按照本指南要求获取Android 6.0的权限, https://developer.android.com/preview/features/runtime-permissions.html#support-lib 但是,我必须销毁我的应用程序并重新启动以实际拥有WRITE_EXTERNAL_STORAGE权限,否则它将继续无法创建文件。 我错过了什么吗? if(ActivityCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED){ ActivityCompat.requestPermissions((MainActivity)mContext,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); } else { Intent i = new Intent(v.getContext(), ServiceDownload.class); v.getContext().startService(i); } 文件在服务中创建,这是模拟器而不是真实设备。

使用MVP架构在运行时检查权限的最佳方法是什么?

我正在开发一个Android应用程序,我必须在运行时请求权限。 我想知道使用Model-View-Presenter架构实现它的最佳方法。 我最初的想法是让演示者调用一个负责权限的组件(例如PermissionHandler ),并相应地更新视图。 问题是检查权限的代码与Activity类紧密结合。 以下是一些需要Activity或Context的方法: ContextCompat.checkSelfPermission() ActivityCompat.shouldShowRequestPermissionRationale() ActivityCompat.requestPermissions() onRequestPermissionsResult() (回调) 这意味着我必须将一个活动对象传递给演示者,我不太喜欢这个,因为我听说保持演示者免受Android代码攻击是有利于测试的。 因此,我考虑在视图级别(在一个活动中)处理权限,但是我想这会损害使视图仅负责UI更新的目的,没有业务逻辑。 我不确定什么是最好的方法来解决保持代码尽可能分离和可维护的问题。 有任何想法吗?

Marshmallow的运行时许可

这种新的和令人敬畏的安全function是运行时许可 我正在努力理解它并为此制作一个演示但是当我在处理DIALOG的用户许可时,我想到了一个问题。 如何处理“ 永不再问 ” 假设我的应用程序必须需要位置/联系人,但是用户拒绝它“不要再问”。 我能做些什么? 并非所有用户都了解我的字段是必需的。 有什么建议吗?

用于Marshmallow PermissionHelper的Android Robolectricunit testing

我想学习Robolectric用于Android Marshmallow应用程序的unit testing。 我用一些方法编写了一个PermissionHelper ,使权限处理更容易一些。 为了开始这个类的unit testing,我试图测试最简单的方法: public static boolean hasPermissions(Activity activity, String[] permissions) { for (String permission : permissions) { int status = ActivityCompat.checkSelfPermission(activity, permission); if (status == PackageManager.PERMISSION_DENIED) { return false; } } return true; } 这是我到目前为止写的Robolectric测试: @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class) public class PermissionHelperTest { private PermissionHelper permissionHelper; private ShadowApplication application; @Before public […]

从android启动服务时的权限问题

我已经将服务编写为应用程序的一部分。 我尝试使用以下代码从第二个应用程序调用此服务: Intent intent = new Intent () ; intent.setClassName(“com.test” ,”com.test.DownloadService”) ; // Create a new Messenger for the communication back Messenger messenger = new Messenger(handler); intent.putExtra(“MESSENGER”, messenger); intent.setData(Uri.parse(“http://www.vogella.com/index.html”)); intent.putExtra(“urlpath”, “http://www.vogella.com/index.html”); this.startService(intent); 它给出了以下例外 07-10 09:27:28.819: ERROR/AndroidRuntime(4226): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.inject/com.inject.MyActivity}: java.lang.SecurityException: Not allowed to start service Intent { dat=http://www.vogella.com/index.html cmp=com.test/.DownloadService […]

android中的有什么用?

从android文档中可以清楚地看到,使用“permission-group”我们可以创建一个权限组。 使用android清单文件中的“permission”元素,我们可以定义一个权限。 此权限可以添加到权限组。 如果我们将此权限组命名为“com.example.permission-group”,我们可以使用“uses-permission”在另一个应用程序中使用它。 如果我们可以使用,我们是否可以访问该组的所有权限。 如果上述情况有误,那我们怎样才能利用“权限组”

尝试将文件写入Android中的SD卡时,FileNotFoundException(权限被拒绝)

从标题中可以看出,我在Android中将文件写入sdcard时遇到问题。 我已经检查了这个问题,但它没有帮助我。 我想写一个将在sdcard上的公共空间中的文件,以便任何其他应用程序都可以读取它。 首先,我检查是否安装了SD卡: Environment.getExternalStorageState(); 然后,我运行这段代码: File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); baseDir.mkdirs(); File file = new File(baseDir, “file.txt”); try { FileOutputStream out = new FileOutputStream(file); out.flush(); out.close(); Log.d(“NEWFILE”, file.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } 我有: … 在我的AndroidManifest.xml中。 确切的错误是这样的: java.io.FileNotFoundException: /storage/1510-2908/Download/secondFile.txt: open failed: EACCES (Permission denied) 我正在模拟器上测试我的代码(模拟Nexus5 API 23)。 我所需的最低SDK版本是19(4.4 Kitkat)。 此外,一切正常,使用相同的代码将文件写入SD卡上的私人文件夹,所以我说前代码也应该工作: File newFile = […]

Android M权限关闭我的应用

我在登录屏幕上检查所需的权限。 对话框显示要求我需要的4个权限。 一切都很好,但是当对话框出现时,背景变黑,我的应用程序关闭(不会崩溃,只是关闭)。 当我完成选择权限后,我再次打开应用程序并继续从停止的位置运行。 在显示权限对话框时,如何让应用程序继续运行? 我使用一个检查权限的类,并在登录活动中调用它。 class上: 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; […]

从设置中读取字体大小

这个问题几乎是一个Android应用程序:如何读取设置下的字体大小? 我读了CommonsWare的答案,指出使用Settings.System.FONT_SCALE 。 所以我写了几行: float scale = -66.6f; try { scale = android.provider.Settings.System.getFloat(getContentResolver(), android.provider.Settings.System.FONT_SCALE); } catch(SettingNotFoundException e) { Log.e(getClass().getSimpleName(), “Error: “, e); } Toast.makeText(this, “scale=” + scale, Toast.LENGTH_LONG).show(); 我的问题是我总是得到SettingNotFoundException我正在使用Android 4.2.2设备。 顺便说一句,我的代码是在Activity的onCreate回调中。 我也搜索了该问题并发现了大约3个使用相同代码的网站。 是否需要一些特殊许可? 我也尝试了android.permission.WRITE_SETTINGS权限但没有成功。

麦克风许可

安装我编程的应用程序时,需要“使用麦克风”的权限。 但是我没有在清单中特别要求它,我拥有的是相机许可。 这是麦克风许可的来源吗?