Articles of android permissions

等待用户许可

我建立了一个在启动时采样GPS的应用程序。 您可能知道,在Android M及更高版本的运行时期间会请求权限。 所以,在我的情况下,我开始检查是否需要权限,如下所示: private void permissionForAndroidM() { if (Build.VERSION.SDK_INT > 22) { String[] allPermissionNeeded = { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}; List permissionNeeded = new ArrayList(); for (String permission : allPermissionNeeded) if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) permissionNeeded.add(permission); if (permissionNeeded.size() > 0) { requestPermissions(permissionNeeded.toArray(new String[0]), 0); } } } 但是 Android继续运行代码并要求GPS数据(=崩溃,因为用户没有接受权限请求)。 我find了许多关于等待用户输入的解决方案(比如使用DialogInterface.OnClickListener , 链接 ,但是在这种情况下无法实现,因为我没有创建对话框)。 最重要的是,问题:如何从Android权限对话框中等待用户回答?

Android致命错误 – 在onSaveInstanceState之后无法执行此操作

我在Android中请求权限后尝试执行片段事务 – 但应用程序不断崩溃。 如何更改此代码以避免这种情况? 任何帮助表示赞赏。 在发送电子邮件之前检查许可: private void emailShare() { if (mayRequestContacts()) { emailShareImpl(); } } 检查许可: private boolean mayRequestContacts() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { return true; } requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS); return false; } 允许检查结果: @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == REQUEST_READ_CONTACTS) { if (grantResults.length == 1 […]

Android系统覆盖窗口

我正在尝试创建一个系统覆盖。 但我一直得到“许可被拒绝”。 我正在使用SDK版本23。 我的清单文件: 我用来创建叠加层的代码: //mView = new HUDView(this); mButton = new Button(this); mButton.setText(“Overlay button”); mButton.setOnTouchListener(this); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); params.gravity = Gravity.RIGHT | Gravity.TOP; params.setTitle(“Load Average”); WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.addView(mButton, params);

用户和当前进程都没有android.permission.ACCESS_COARSE_LOCATION

我知道这可能是一个愚蠢的问题,我之前提到了所有类似的问题,但不幸的是我可以解决这个问题。 很可能是我的Manifest.xml文件中存在问题。 当我尝试访问位置时,应用程序崩溃了 这是我的manifest.xml 当我运行它时抛出此错误 java.lang.SecurityException: Neither user 11029 nor current process has android.permission.ACCESS_COARSE_LOCATION. 与其他权限类似。 我在清单文件中看不到任何错误。 帮助赞赏

Android:写入失败:EPIPE(Broken pipe)写入文件错误

我试图以编程方式截取Android屏幕截图。 我做了以下代码: private void getsnap(){ try{ Process sh = Runtime.getRuntime().exec(“su”, null, null); OutputStream os = sh.getOutputStream(); String filePath = this.getFilesDir().getPath().toString() + “/fileName1.jpeg”; os.write((“/system/bin/screencap -p ” + filePath).getBytes(“ASCII”)); os.flush(); os.close(); sh.waitFor(); } catch (Exception e) { e.printStackTrace(); } } java.io.IOException: write failed: EPIPE (Broken pipe) 请有人帮忙吗? 我已经检查了其他post,但我找不到解决问题的方法。 编辑: 请注意,错误发生在os.write() 。

adb shell的BroadcastReceiver权限

考虑使用BroadcastReceiver实现简单目标的简单工具。 因为其他应用程序不应该使用它,所以它使用signature或signatureOrSystem定义权限: 现在我想通过发送广播来测试这个 adb shell am broadcast -n any.test/.Receiver 从我的电脑。 虽然这在模拟器上完全正常,但在设置此权限时,它在真实设备上根本不起作用。 如果未设置权限,则一切都按预期工作。 那么如何定义或授予权限以便我可以在具有ADB的真实设备上测试所有这些? 我想在调试模式下使这个导出的接收器更安全,所以如果有一个特殊的ADB使用权限或运行时测试只允许来自ADB调用我可以在Receiver.onReceive(Context, Intent)中实现它,也会有所帮助。 接收方不必同时为ADB和其他应用程序工作。

将权限置于Android .aar库项目的清单中

我正在开发一个包含两个模块的Android项目,其中一个是用于生成.aar文件的库模块,另一个是使用生成的.aar文件的示例应用程序。 因此,此项目中有两个AndroidManifest.xml文件。 假设我正在开发蓝牙库,所以我将蓝牙权限放在库的清单文件中。 通过将此库.aar作为依赖项包含在内,我可以省略应用程序清单文件中的标记吗? 换句话说,Android应用程序“合并”(可能不是字面上但在语义上)依赖.aar库的权限? 我的经验表明,虽然某些权限倾向于如上所述,但其他权限要求在应用程序的AndroidManifest.xml显式声明。 我想知道我的假设是否属实,如果有任何资源或文档清楚地区分那些可以驻留在.aar库的清单中的权限以及那些需要在应用程序自己的清单文件中声明的权限。 谢谢!

棉花糖FINE和COARSE位置许可

我正在尝试访问ACCESS_FINE_LOCATION ,如果找不到,请访问ACCESS_COARSE_LOCATION 。 所以我要求获得这2个权限,但是他们给了我相同的对话框,要求获得位置许可。 我知道这些都属于同一组,但谷歌说: 注意:即使用户已在同一组中授予了其他权限,您的应用仍需要明确请求其所需的每个权限。 此外,将权限分组到组中可能会在将来的Android版本中发生变化。 您的代码不应该依赖于特定权限属于或不属于同一组的假设。 这意味着我要求在一秒内获得这2个权限,这会导致连续2个对话框。 这对我来说似乎不是很友好。 有没有更好的办法?

我该怎么办:这需要android.permission.INTERACT_ACROSS_USERS_FULL

我正在努力将micode的开源指南针集成到我正在制作的应用程序中。 我想知道如果我明确地在我的清单中用正确的拼写说明我如何解决这里的权限错误。 它仍然出现,我需要这个许可。 这令我感到困惑…… 11-03 13:53:58.241: E/AndroidRuntime(8975): Caused by: \ java.lang.SecurityException: Permission Denial: registerReceiver from \ net.micode.compass asks to run as user -1 but is calling from user 0; this \ requires android.permission.INTERACT_ACROSS_USERS_FULL

java.io.FileNotFoundException:/ storage / emulated / 0 / new file.txt:open failed:EACCES(Permission denied)

我一直在尝试加密文件并将这些文件重新写回到同一个地方。 但我收到错误消息“java.io.FileNotFoundException:/ storage / emulated / 0 / New file.txt:open failed:EACCES(Permission denied)”。 我的清单文件就是这个 <application android:allowBackup="true" 我想我已在那里提供了正确的许可。 用于加密文件的代码就是这个。 public static void encrypt(SecretKey secretKey, String filePath){ try { // Here you read the cleartext. FileInputStream fis = new FileInputStream(filePath); // This stream write the encrypted text. This stream will be wrapped by another stream. FileOutputStream fos = […]