我想测试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
开发人员doc:在运行时请求权限明确提到了运行时权限以及如何使用它.我也能够执行它们.
但问题是:Android在哪里存储运行时权限值?
即,当用户删除与应用程序关联的数据时,权限会重置,那么Android在哪里存储这些值?(它是在应用缓存中还是在任何其他位置).以什么格式?(它是数据库还是共享首选项文件还是其他任何文件)它们是如何存储的?(加密或未加密).
在许多现有答案和开发人员文档中搜索,但在这方面找不到任何有用的信息.任何帮助都感激不尽.
android android-manifest android-permissions runtime-permissions
我正在做一个按钮点击扫描条形码的应用程序,它可以正常工作到Lollipop版本.当我来到棉花糖时,它停止了工作.这是错误:
camerabase连接到相机0时发生错误
它迫使我通过以下方式开启许可:
设置 - >应用程序 - >我的应用程序 - >相机.
我的问题是如何在Marshmallow中自动允许我的应用程序使用相机,或者要求用户在运行时打开相机.屏幕截图:
android barcode android-camera android-6.0-marshmallow runtime-permissions
我正在尝试编写一个发送短信的应用程序。在检查我是否拥有所需的权限时,它返回 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) 在某些应用程序中,我看到读取接收短信以获取活动代码!
但是对于阅读此消息不允许任何权限!
我的 android 版本是28,我知道在23或更高版本中,我们会从用户那里获得运行时许可!
在这个应用程序中如何在没有任何许可的情况下获取已读消息?
我正在使用Android Marshmallow READ_PHONE_STATE权限,我想更改权限请求中显示的文本.
默认情况下显示:
允许[应用程序名称]拨打和管理电话?
但我正在用它来获取device id和sim serial number,所以我认为最好更改请求消息.有谁知道怎么做(一些特殊的功能或什么)?
或者我只需要实现一个独立Dialog的?
非常感谢你.
android android-permissions android-6.0-marshmallow runtime-permissions
我有一个扩展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权限?
我的应用使用位置权限.如果在运行时从App Settings撤消此权限并返回到应用程序,则会销毁并重新创建当前活动.如何防止这种活动的重建?
android android-permissions android-6.0-marshmallow runtime-permissions
下面是我的代码,我称此代码为获取运行时权限。在这种情况下,“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) 我正在尝试从服务器下载一些 .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)