Articles of android permissions

如何调试/重置Android 6.0权限?

在迁移我的某个应用程序以使用Android 6.0权限系统时,我发现使用模拟器调试权限非常困难。 发现: 在使用requestPermissions()方法时,禁用应用信息屏幕中的权限不会重新显示授予权限对话框。 重新安装应用程序似乎是让应用程序再次显示授予权限对话框的唯一方法。 使用Android模拟器调试权限的正确方法是什么?

java.io.filenotfoundexception在设备上打开失败的eacces(权限被拒绝)

以下代码包括从服务器下载文件并将其保存在存储中,当设备具有内部存储时可以正常工作。 但是当我使用没有内部存储的设备尝试它时,只有外部存储器,我得到以下exception。 java.io.filenotfoundexception打开失败的eacces(权限被拒绝) public void downloadFile(String dlUrl, String dlName) { int count; HttpURLConnection con = null; InputStream is = null; FileOutputStream fos = null; try { URL url = new URL( dlUrl ); con = (HttpURLConnection) url.openConnection(); con.setDoInput(true); con.connect(); is = url.openStream(); String dir = Environment.getExternalStorageDirectory() + Util.DL_DIRECTORY; File file = new File( dir ); […]

如果我只在Google Play商店发布,我是否需要android.permission.WAKE_LOCK用于Google Play服务?

我正在尝试整合Google Analytics for Android。 根据此处的文档 ,它要求添加android.permission.WAKE_LOCK (提供下面的注释说明)。 我不清楚它。 如果我仅在Google Play商店中发布该应用,我是否还需要此function? 如果不是绝对必要的话,我真的不想要求用户获得额外的许可。 特别是,我不明白这个说明在这里的含义是什么: 可选地,可以请求WAKE_LOCK权限以改进非Google Play设备上的分派。

Android:获取用户ID而不需要可怕的(用户)权限?

为了管理用户偏好,目前我正在抓取谷歌用户名(实际上是他们已经注册到设备的电子邮件地址)并使用(哈希)作为“用户ID”来区分不同的用户。 与此处描述的内容类似。 这一切都运行良好,但有些用户(可以理解)被任何许可吓到,似乎给应用程序一些邪恶的力量来浏览他们的帐户信息或联系人。 编辑:对于Google现在在Android 6 运行时权限架构中实施权限组的方式,这个问题更为严重。 他们已将GET_ACCOUNTS放入CONTACTS权限组。 现在,为了生成唯一的匿名用户ID,必须向用户显示一个对话框,其中显示: 允许此应用访问您的联系人? | 拒绝| 允许| 这有多误导? 我的应用程序不希望访问联系人,但要求用户授予该应用程序访问联系人的权限! 是的,有机会向用户解释一个单独的对话框,事实上,不需要访问联系人,但他们仍然得到股票系统对话框,要求他们授予访问联系人的权限……自然他们会想“如果不需要访问联系人,为什么要求我授予此权限?” 并且“我真的相信开发人员吗?他们说不需要访问联系人,但这是真的吗?”……非常混乱,用户体验非常糟糕恕我直言(以及其他人的意见)。 我宁愿避免所有这些麻烦和困惑,并获得唯一的用户ID,而无需特殊权限。 那么SDK中是否有一个库存函数或方法,它将为用户返回一个唯一的用户ID,而不需要任何额外的权限? 如果没有,我会感到很惊讶,因为想要做的事情似乎很常见……拥有用于管理应用用户的用户ID。 两点: (a)我只需要一个匿名用户ID ……我实际上并不需要用户的电子邮件地址,也不需要用户的电子邮件地址。 所以我无法getUserID()为什么谷歌无法提供返回唯一匿名ID的getUserID()方法,而无需向应用授予特殊权限。 (b)它必须是用户ID,而不是设备ID,以便它可以在注册到同一个Google帐户的所有用户设备上运行。 谢谢。

java.lang.SecurityException:BLUETOOTH权限崩溃。 (仅限三星设备)

我遇到了以下崩溃,但这只发生在一些三星设备上(并非所有,我们在三星设备上开发/测试) 崩溃日志: java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10025 nor current process has android.permission.BLUETOOTH. at android.os.Parcel.readException(Parcel.java:1540) at android.os.Parcel.readException(Parcel.java:1493) at android.bluetooth.IBluetooth$Stub$Proxy.isEnabled(IBluetooth.java:1156) at android.bluetooth.BluetoothAdapter.isEnabled(BluetoothAdapter.java:697) at org.altbeacon.beacon.service.scanner.CycledLeScanner.finishScanCycle(CycledLeScanner.java:245) at org.altbeacon.beacon.service.scanner.CycledLeScanner.scheduleScanCycleStop(CycledLeScanner.java:234) at org.altbeacon.beacon.service.scanner.CycledLeScanner$1.run(CycledLeScanner.java:230) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5972) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 这是我的AndroidManifest: …(more activities here removed) 我真的不知道为什么它只发生在一些设备上; 我最初的猜测是它与三星KNOX有关,而且(少数)崩溃的用户是KNOX用户,他们有一个禁用蓝牙的电话政策。 有没有其他人遇到这个? 或者有人知道这可能是什么?

在android marshmallow 6.0中无法接听来电

我正在创建一个调用应用程序。 这是在Android 4.0和5.0上运行的自动答案; 而当我有一个来电应答呼叫按钮工作,但它不适用于Android 6.0。 我测试了这篇文章的答案,但它也不起作用: 在Android 6.0中回答来电 IncomingActivity: @Override public void onClick(View v) { switch (v.getId()) { case R.id.imgaccept: { if (Build.VERSION.SDK_INT >= 21) { new Thread(new Runnable() { @Override public void run() { try { Runtime.getRuntime().exec( “input keyevent ” + KeyEvent.KEYCODE_HEADSETHOOK ); Intent intent = new Intent(getApplicationContext(), OutGoing.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); […]

如何在Android 8.0 Oreo上以编程方式结束传入呼叫

在Android 7.1之前,可以通过使用ITelephony.endCall()方法结束传入呼叫,并为您的应用提供权限android.permission.CALL_PHONE和android.permission.READ_PHONE_STATE 。 在Android 8.0 Oreo (API 26)上执行相同操作时,我收到此错误 12-09 18:11:25.195 16833-16833 / li.doerf.leavemealone E / TelephonyServiceCallHangup:缺少权限MODIFY_PHONE_STATE,无法挂断电话 由于MODIFY_PHONE_STATE是受保护的权限,我的应用无法获取。 有没有办法以编程方式结束Android 8.0+上的来电?

等待用户许可

我建立了一个在启动时采样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);