标签: runtime-permissions

浓缩咖啡 - 单击对话框的按钮

我想测试Android 6的权限,但我找不到使用Espresso点击"允许"按钮的方法.有没有办法做到这一点?

在此输入图像描述

Espresso的版本是2.2.1.

考试:

    @Test
    public void acceptFirstPermission() throws Exception {
        onView(withText("ALLOW")).perform(click());
    }
Run Code Online (Sandbox Code Playgroud)

行为:

我仍然使用Dialog接收冻结的屏幕(如屏幕截图所示).一直测试执行直到他完成.

输出:

Running tests
Test running started
android.support.test.espresso.NoActivityResumedException: No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)?
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:580)
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:82)
at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:53)
at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:184)
at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115)
at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87)
at com.walletsaver.app.test.espresso.MarshmallowPermissionsTest.acceptFirstPermission(MarshmallowPermissionsTest.java:31)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55)
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:257)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at …
Run Code Online (Sandbox Code Playgroud)

android android-espresso android-6.0-marshmallow runtime-permissions

8
推荐指数
2
解决办法
9197
查看次数

Android中的权限存储在哪里?

开发人员doc:在运行时请求权限明确提到了运行时权限以及如何使用它.我也能够执行它们.

但问题是:Android在哪里存储运行时权限值?

即,当用户删除与应用程序关联的数据时,权限会重置,那么Android在哪里存储这些值?(它是在应用缓存中还是在任何其他位置).以什么格式?(它是数据库还是共享首选项文件还是其他任何文件)它们是如何存储的?(加密或未加密).

在许多现有答案和开发人员文档中搜索,但在这方面找不到任何有用的信息.任何帮助都感激不尽.

android android-manifest android-permissions runtime-permissions

8
推荐指数
1
解决办法
1482
查看次数

如何询问Camera的运行时权限

我正在做一个按钮点击扫描条形码的应用程序,它可以正常工作到Lollipop版本.当我来到棉花糖时,它停止了工作.这是错误:

camerabase连接到相机0时发生错误

它迫使我通过以下方式开启许可:

设置 - >应用程序 - >我的应用程序 - >相机.

我的问题是如何在Marshmallow中自动允许我的应用程序使用相机,或者要求用户在运行时打开相机.屏幕截图:

在此输入图像描述

android barcode android-camera android-6.0-marshmallow runtime-permissions

8
推荐指数
5
解决办法
3万
查看次数

Android 运行时权限已授予但仍被拒绝

我正在尝试编写一个发送短信的应用程序。在检查我是否拥有所需的权限时,它返回 true,但仍会因 SecurityException 崩溃。

按下按钮时

private void startAutoMsg() {
    Log.d("Starting Auto Msg");
    //FIXME: Start proper loop
    if (canSendSms()) {
        sendMessage();
        mAutoMsgButton.setBackgroundColor(Color.GREEN);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下功能来确定我是否拥有适当的权限

private boolean canSendSms() {
    if ((ContextCompat.checkSelfPermission(mContext, Manifest.permission.SEND_SMS)
            == PackageManager.PERMISSION_GRANTED)) {
        Log.d("Permission granted");
        return true;
    } else {
        Log.d("Permission denied");
        ActivityCompat.requestPermissions(
                mActivity, new String[]{Manifest.permission.SEND_SMS}, 101);
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码返回 true,因此 SMS 试图用这个发送

private void sendMessage() {
    Log.d("sending message");
    PendingIntent sentPI = PendingIntent.getBroadcast(
            mContext, 0, new Intent(Constants.ACTION_SMS_SENT), 0);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(
            mContext, 0, new Intent(Constants.ACTION_SMS_DELIVERED), 0); …
Run Code Online (Sandbox Code Playgroud)

sms android runtime-permissions

8
推荐指数
1
解决办法
2621
查看次数

如何在Android中未经许可阅读接收短信

在某些应用程序中,我看到读取接收短信以获取活动代码!
但是对于阅读此消息不允许任何权限
我的 android 版本是28,我知道在23或更高版本中,我们会从用户那里获得运行时许可
在这个应用程序中如何在没有任何许可的情况下获取已读消息?

android android-permissions runtime-permissions

8
推荐指数
1
解决办法
3717
查看次数

Android - 更改READ_PHONE_STATE权限请求消息

我正在使用Android Marshmallow READ_PHONE_STATE权限,我想更改权限请求中显示的文本.

默认情况下显示:

允许[应用程序名称]拨打和管理电话?

但我正在用它来获取device idsim serial number,所以我认为最好更改请求消息.有谁知道怎么做(一些特殊的功能或什么)?

或者我只需要实现一个独立Dialog的?

非常感谢你.

android android-permissions android-6.0-marshmallow runtime-permissions

7
推荐指数
1
解决办法
2887
查看次数

Xamarin - 无法覆盖OnRequestPermissionsResult

我有一个扩展Activity和实现的类IOnRequestPermissionsResultCallback.

我想使用OnRequestPermissionResult和我编码完全一样,在XamarinBlog(部分处理权限请求)和Monodroid Github,但我总是得到no suitable method to override错误.

namespace App1
{
    class Aplication : Android.App.Activity,
                       Android.Support.V4.AppActivityCompat.IOnRequestPermissionsResultCallback
    {

        public override async void OnRequestPermissionsResult(
            int requestCode,
            string[] permissions,
            Permission[] grantResults
        ) { }

    }
}
Run Code Online (Sandbox Code Playgroud)

如何在Xamarin中使用新的Marshmallow权限?

c# android xamarin.android runtime-permissions

7
推荐指数
1
解决办法
4152
查看次数

如何防止在Android M或更高版本中在运行时更改权限时重新创建活动

我的应用使用位置权限.如果在运行时从App Settings撤消此权限并返回到应用程序,则会销毁并重新创建当前活动.如何防止这种活动的重建?

android android-permissions android-6.0-marshmallow runtime-permissions

7
推荐指数
1
解决办法
1208
查看次数

运行时权限:shouldshowrequestpermissionrationale 始终返回 false

下面是我的代码,我称此代码为获取运行时权限。在这种情况下,“shouldshowrequestpermissionrationale 始终返回 false”。我找不到解决方案为什么会这样。因此,不会显示运行时权限警报。请给我建议一个解决方案...

   private void checkRuntimePermission() {

    Logger.infoLog("checkRuntimePermission");
    if(ActivityCompat.checkSelfPermission(this, permissionsRequired[0]) != PackageManager.PERMISSION_GRANTED){
        Logger.infoLog("checkRuntimePermission first if");
        if(ActivityCompat.shouldShowRequestPermissionRationale(WelcomeActivity.this,permissionsRequired[0])){
            Logger.infoLog("checkRuntimePermission if");
            //just request the permission
            //Show Information about why you need the permission
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Need Multiple Permissions");
            builder.setMessage("This app needs Camera and Location permissions.");
            builder.setPositiveButton("Grant", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    ActivityCompat.requestPermissions(WelcomeActivity.this,permissionsRequired,PERMISSION_CALLBACK_CONSTANT);
                }
            });
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            builder.show();
        }else{
            Logger.infoLog("Show request …
Run Code Online (Sandbox Code Playgroud)

android runtime-permissions

7
推荐指数
2
解决办法
5880
查看次数

SecurityException: 不支持的路径 /storage/emulated/999/Download/somefile.pdf

我正在尝试从服务器下载一些 .pdf 文件到download文件夹

在某些设备上随机抛出此异常

Xiomi 运行 android (8,7,6):97% 仅在此设备中崩溃

已授予存储运行时权限并且可以正常工作

我发现某些设备即使在运行时许可后也无法工作

文件路径.xml

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <files-path
        name="images"
        path="images/" />
    <external-files-path
        name="share"
        path="share/" />
    <external-files-path
        name="reminder_images"
        path="reminder_images/" />
</paths>
Run Code Online (Sandbox Code Playgroud)

安卓清单

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

Caused by java.lang.SecurityException: Unsupported path /storage/emulated/999/Download/Somefile.pdf
       at android.os.Parcel.readException(Parcel.java:2013)
       at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
       at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
       at android.content.ContentProviderProxy.insert(ContentProviderProxy.java:476)
       at android.content.ContentResolver.insert(ContentResolver.java:1555)
       at android.app.DownloadManager.enqueue(DownloadManager.java:1163)
       at com.esafirm.rxdownloader.RxDownloader.download(RxDownloader.java:83)
       at com.esafirm.rxdownloader.RxDownloader.download(RxDownloader.java:60)
       at in.okcredit.app.ui.account.AccountActivity.onReportGenerated(AccountActivity.java:320)
       at in.okcredit.app.ui.account.AccountPresenter$1.onSuccess(AccountPresenter.java:118)
       at in.okcredit.app.ui.account.AccountPresenter$1.onSuccess(AccountPresenter.java:111)
       at io.reactivex.internal.operators.single.SingleObserveOn$ObserveOnSingleObserver.run(SingleObserveOn.java:81)
       at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:119)
       at android.os.Handler.handleCallback(Handler.java:794)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at …
Run Code Online (Sandbox Code Playgroud)

android securityexception runtime-permissions

7
推荐指数
0
解决办法
2462
查看次数