标签: runtime-permissions

如何在现有应用程序上实现Android 6.0运行时权限

问题:

我有一个现有的应用程序,我想实现Android 6.0的运行时权限.我在运行时权限上已经阅读了很多不同的东西,但我似乎无法绕过所有不同的片段.我找到的任何内容实际上都没有显示如何将其实现到现有的Activity中.

其他要点

当我运行针对SDK v23的现有应用程序时,我得到了预期的权限错误,但我得到的权限错误甚至不是我请求的权限.我在Manifest文件中有SEND_SMS权限,但我得到的错误是READ_SMS.我的应用程序在6.0之前运行正常,没有READ_SMS.

我希望我的应用程序在应用程序启动后立即请求许可,因为应用程序的唯一目的是发送短信,因此没有该权限,该应用程序没有其他用途.

问题:

一旦应用程序启动,我如何将SEND_SMS的运行时权限实现到我现有的Activity中?

这些权限的处理是否需要在后台线程中运行?

我是否还需要READ_SMS的权限,因为这是它给出的权限错误(即使该权限从未在我的应用程序上使用过)?

我现有的活动:

public class MainActivity extends Activity implements OnClickListener {

SimpleCursorAdapter mAdapter;
AutoCompleteTextView txtContract;
EditText txtTrip;
EditText txtDate;
Button btnSend;
Button btnUpdate;
String today;

String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";

private static final String API_KEY = "abcxyz";
private static final String CONTRACT_REGEX = "^([a-zA-Z0-9_-]){5}$";
private static final String TRIP_REGEX = "^([a-zA-Z0-9_-]){1,10}$";
private static final String DATE_REGEX = "^\\d{2}\\/\\d{2}\\/\\d{4}$";
private static final String PHONE_NUMBER = "1234567890";
private static final …
Run Code Online (Sandbox Code Playgroud)

android android-6.0-marshmallow runtime-permissions

6
推荐指数
1
解决办法
2351
查看次数

Appcelerator中的相机权限

我正在使用Appcelerator工作室来开发我的应用程序.在这个应用程序中,我正在从相机拍照并将它们发布到我的服务器.对于Android 6,我要求用户使用相机的运行时权限.我的代码运行正常.但是,当我在运行时请求相机的许可时.它要求3个权限,

  1. 允许应用拍摄照片和录制视频.
  2. 应用程序将访问库.
  3. 应用程序将使用相机位置.

我的问题是为什么当我只使用相机拍照时我会看到所有这些权限,我怎么能摆脱它们呢?

代码段:

if (Ti.Media.hasCameraPermissions()) {
        openCamera();
    } else {
        Ti.Media.requestCameraPermissions(function(e) {
            if (e.success) {
                openCamera();
            } else {
                alert('You denied permission');
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

camera android appcelerator android-permissions runtime-permissions

6
推荐指数
1
解决办法
1601
查看次数

Android 6.0 权限。阅读短信

我想获得在我的应用程序中读取短信的权限。这是我的代码:

String permission = Manifest.permission.READ_SMS;
if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED){
    permissionList.add(permission);

    if (!ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), permission)){
        requestPermissions(new String[]{permission}), SMS_PERMISSION);
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有收到确认许可请求的对话框。对于其他权限(如WRITE_STORAGE, READ_CONTACTS),我得到了这个对话框。你知道如何解决吗?

方法onRequestPermissionsResult告诉我未授予许可。但它可以工作,没有确认对话框。

android android-6.0-marshmallow runtime-permissions

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

RequestPermissions 不显示对话框

我发现很多类似的主题具有相同的威胁,但我仍然找不到解决我的问题的方法。我编写此代码是为了向应用程序授予写入权限,但没有显示对话框。我在监视器中收到“无写入权限”消息。

if(ContextCompat.checkSelfPermission(getContext(),Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
Log.i("permissions", "No writing permission");

ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 225);
Run Code Online (Sandbox Code Playgroud)

我在AndroidManifest文件中添加了权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

改变了目标sdk targetSdkVersion 23,我正在使用android 6.0.1

编辑: 我也绑定了这段代码,但它仍然不起作用

requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 225);
Run Code Online (Sandbox Code Playgroud)

android android-manifest runtime-permissions

5
推荐指数
1
解决办法
8037
查看次数

当我们有多个活动时,如何集中运行时权限

对不起,我的英语不好.

Activity我的应用程序中有多个,我需要集中运行时应用程序权限.

我需要使用BaseActivity吗?

如果是,请建议我如何Activity在应用程序中的许多情况下处理它.

如果不是,请建议更好的方法来处理它.

我想减少代码冗余.没有兴趣一次又一次地编写相同的代码Activity.

我正在寻找负面情况,其中用户拒绝了许可,我必须显示理性,而不是继续要求允许.并基于我必须提供消息或我必须更新UI

java android android-activity runtime-permissions

5
推荐指数
1
解决办法
242
查看次数

Android 运行时权限流程:我可以使用 ActivityCompat.requestPermissions 发送额外内容吗?

在请求授予 Android 危险权限期间,是否有任何方法可以发送捆绑包/附加内容(就像我们对意图所做的那样)?

在为android授予危险权限的正常过程中,我们应该ActivityCompat.requestPermissions(...)根据文档调用如下定义:

void requestPermissions (Activity activity, String[] permissions,int requestCode)
Run Code Online (Sandbox Code Playgroud)

可以看出,没有选项可以在权限请求中发送任何额外信息。目前,我在活动中使用静态参数在获得我的许可后恢复它们。

我想知道有什么选择吗?

android-permissions android-bundle runtime-permissions dangerous-permissions

5
推荐指数
1
解决办法
683
查看次数

我允许后,表面视图不显示相机

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_camera, container, false);
    cameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
    flipCamera = view.findViewById(R.id.flipCamera);
    flashCameraButton = view.findViewById(R.id.flash);
    captureImage = view.findViewById(R.id.captureImage);
    surfaceView = view.findViewById(R.id.surfaceView);
    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.addCallback(this);
    flipCamera.setOnClickListener(this);
    captureImage.setOnClickListener(this);
    flashCameraButton.setOnClickListener(this);
    getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    if (Camera.getNumberOfCameras() > 1) {
        flipCamera.setVisibility(View.VISIBLE);
    }
    if (!getActivity().getBaseContext().getPackageManager().hasSystemFeature(
            PackageManager.FEATURE_CAMERA_FLASH)) {
        flashCameraButton.setVisibility(View.GONE);
    }


    return view;
}

@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void surfaceCreated(SurfaceHolder holder) {

    if (!openCamera(Camera.CameraInfo.CAMERA_FACING_BACK)) {
        alertCameraDialog();
    }

}


private boolean openCamera(int id) {
    boolean result = false;
    cameraId …
Run Code Online (Sandbox Code Playgroud)

camera android surfaceview runtime-permissions

5
推荐指数
2
解决办法
1037
查看次数

如何在 androidTest 测试中创建测试资产并授予运行时权限?

在将其标记为重复之前,请注意这不是授予被测应用程序权限,而是授予测试 apk 本身。

在我的应用程序中,有一个功能可以从Download目录 ( /sdcard/download)中获取文件,对其进行验证,然后将其复制到应用程序的私有存储 ( /data/data/com.package.myapp/files/) 中,以便在需要时可以使用该文件。

为了测试这个功能,我需要在Download目录中放置一些测试文件:一些是已知有效的,另一些是已知无效的文件。我已将这些文件放在组中的assets目录中androidTest

在我的测试类中,我有一个@BeforeClass public static void prepareAssets()方法,它的工作是在导入和验证测试实际运行之前从assets目录中获取这些文件并将它们复制到Download文件夹中。

此准备步骤失败:

04-12 00:25:19.282 11231-11246/? E/TEST: Failed to prepare test assets
java.io.FileNotFoundException: /storage/emulated/0/Download/test1.jpg (Permission denied)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:169)
    at ca.mahram.android.testextstorexfer.CopyUtil.copy(CopyUtil.java:20)
    at ca.mahram.android.testextstorexfer.ExampleInstrumentedTest.prepareAssets(ExampleInstrumentedTest.java:54)
    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.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at …
Run Code Online (Sandbox Code Playgroud)

android android-testing runtime-permissions

5
推荐指数
0
解决办法
367
查看次数

Android:WebView 中的网络摄像头错误(摄像头权限不起作用)

我已经创建了 WebView Activity 并加载了https://web.doar.zone/coronavirus

这个 URL 需要相机权限,我在 Android 中获得了运行时权限。

这是MainActivity.java的完整代码:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    Context context;

    ActivityMainBinding binding;

    private String url = "https://web.doar.zone/coronavirus";

    @Override
    protected void onResume() {
        super.onResume();
        checkCameraPermission();
    }

    private void checkCameraPermission() {
        int writeExternalStorage = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
        if (writeExternalStorage != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 1001);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode …
Run Code Online (Sandbox Code Playgroud)

android webview android-webview android-permissions runtime-permissions

5
推荐指数
1
解决办法
2304
查看次数

在新项目中安装应用程序时自动授予危险权限 [React Native - Android]

我已经从 React Native cli 安装了很棒的项目并在 Android 构建中运行它。效果很好。

当我添加时,低于危险许可

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)

在我的 android manifest.xml 中并运行该项目,它是在应用程序安装时自动授予的。

我检查了应用程序信息,默认情况下已授予该权限。

笔记:

  • 最小版本:23
  • 目标和编译版本:29
  • 反应本机版本:0.64.0

因此,当我以编程方式检查权限时,它总是被授予。不应该。

android react-native runtime-permissions

5
推荐指数
1
解决办法
542
查看次数