相关疑难解决方法(0)

如何在新的 ActivityResult API (1.3.0-alpha05) 中获取权限请求?

因此,我尝试使用新的 registerForActivityResult() 方法获得许可,并使用 .launch() 按钮单击请求,但它似乎没有打开任何窗口来请求它。我总是在 registerForActivityResult() 中出错。

    // Permission to get photo from gallery, gets permission and produce boolean
private ActivityResultLauncher<String> mPermissionResult = registerForActivityResult(
        new ActivityResultContracts.RequestPermission(),
        new ActivityResultCallback<Boolean>() {
            @Override
            public void onActivityResult(Boolean result) {
                if(result) {
                    Log.e(TAG, "onActivityResult: PERMISSION GRANTED");
                } else {
                    Log.e(TAG, "onActivityResult: PERMISSION DENIED");
                }
            }
        });



        // Launch the permission window -- this is in onCreateView()
    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         mPermissionResult.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION);

        }
    });
Run Code Online (Sandbox Code Playgroud)

这是我的日志:onActivityResult: PERMISSION DENIED

java android android-fragments android-permissions

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

Android:ActivityCompat.requestPermissions 不显示弹出窗口(Android 13,targetSdkVersion=33)

SO 上已经有很多关于这个主题的问题()。然而,到目前为止我找到的答案都不能解决我的问题。

问题是ActivityCompat.requestPermissions不会触发弹出窗口,要求用户授予通知权限。

设置:

  • 在物理设备上测试(Android 13、Pixel 6)
  • 定位 SDK 版本 33 (targetSdkVersion=33)
  • 最小SdkVersion = 29
  • AndroidManifest 拥有权限:<uses-permission android:name="android.permission.POST_NOTIFICATION" />
  • 在 onCreate 中,在其他工作 Activity 中,我执行以下操作:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_DENIED)
{
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, 1);
}
Run Code Online (Sandbox Code Playgroud)

回调如下:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(MainScreenActivity.this, "Woho, you have enabled notifications!", Toast.LENGTH_SHORT).show(); …
Run Code Online (Sandbox Code Playgroud)

notifications android android-permissions

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

android权限READ_CALENDAR&WRITE_CALENDAR

即使我已经在清单中声明了使用权限,它也会给我一个错误,说我需要添加权限.

android清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="groep2.project4">
    <uses-permission android:name="android.permission.READ_CALENDAR"/>
    <uses-permission android:name="android.permission.WRITE_CALENDAR"/>
    <uses-permission-sdk-23 android:name="android.permission.READ_CALENDAR"/>
    <uses-permission-sdk-23 android:name="android.permission.WRITE_CALENDAR"/>
Run Code Online (Sandbox Code Playgroud)

错误:

FATAL EXCEPTION: main 
Process: groep2.project4, PID: 3188 
java.lang.SecurityException: Permission Denial: 
opening provider com.android.providers.calendar.CalendarProvider2 
from ProcessRecord{81d3d48 3188:groep2.project4/u0a58} (pid=3188, uid=10058) 
requires android.permission.READ_CALENDAR or android.permission.WRITE_CALENDAR
                                                               at android.os.Parcel.readException(Parcel.java:1599)
                                                               at android.os.Parcel.readException(Parcel.java:1552)
                                                               at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3550)
                                                               at android.app.ActivityThread.acquireProvider(ActivityThread.java:4778)
                                                               at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:1999)
                                                               at android.content.ContentResolver.acquireProvider(ContentResolver.java:1421)
                                                               at android.content.ContentResolver.insert(ContentResolver.java:1225)
                                                               at groep2.project4.Fragments.pushAppointmentsToCalendar.pushAppointmentsToCalender(pushAppointmentsToCalendar.java:50)
                                                               at groep2.project4.Fragments.TimePickerFragment.makeReminder(TimePickerFragment.java:46)
                                                               at groep2.project4.Fragments.TimePickerFragment.onTimeSet(TimePickerFragment.java:41)
                                                               at android.app.TimePickerDialog.onClick(TimePickerDialog.java:145)
                                                               at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:163)
                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                               at android.os.Looper.loop(Looper.java:148)
                                                               at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Run Code Online (Sandbox Code Playgroud)

这是pushappointmentstocalendar.java

package groep2.project4.Fragments;

import …
Run Code Online (Sandbox Code Playgroud)

permissions android calendar

4
推荐指数
1
解决办法
9835
查看次数

onRequestPermissionsResult 在 Android Fragment 中已弃用

这是我当前(已弃用)的方法:

int LOCATION_REQUEST_CODE = 10001;     
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        if (requestCode == LOCATION_REQUEST_CODE) {
            //Permission granted
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                checkSettingsAndStartLocationUpdates();
            } else {
                //DO SOMETHING - Permission not granted
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

根据android文档https://developer.android.com/training/basics/intents/result我应该使用registerForActivityResult():

// GetContent creates an ActivityResultLauncher<String> to allow you to pass
// in the mime type you'd like to allow the user to select
ActivityResultLauncher<String> mGetContent = registerForActivityResult(new GetContent(),
    new ActivityResultCallback<Uri>() { …
Run Code Online (Sandbox Code Playgroud)

java gps android location

3
推荐指数
1
解决办法
5733
查看次数