首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未知方法registerForActivityResult

未知方法registerForActivityResult
EN

Stack Overflow用户
提问于 2022-01-09 05:12:19
回答 2查看 1.4K关注 0票数 1

我试图请求权限,它为registerForActivityResult抛出了一种未知的方法,起初我使用的是普通android.app.Activity,因为目前由于缺少PC,我一直在使用AIDE,我以前也遇到过与AppCompatActivity有关的问题,但我注意到registerForActivityResult()方法属于ActivityResultCaller,它不是由活动实现,而是由AppCompatActivity实现的,所以我将主要活动切换到扩展AppCompatActivity,在改变了大量导入和依赖关系的过程中,它无法工作,我也试着实现ActivityResultCaller,但是那个错误消失了,一切都符合,但是它说我没有实现抽象方法registerForActivityResult,现在它周围没有红线或错误,所以我回到了不实现它并试图让它与普通appcompatactivity一起工作的问题,因为在我看到的所有教程中,它们都不需要声明MainActivity实现ActivityResultCaller,所以我更多地处理依赖关系,在这一点上,我没有真正记住我做过的所有事情,所以,我现在可能有一些没有必要的代码,我已经删除了大部分代码以使其更简单,但这就是我现在的位置,有什么建议吗?

代码语言:javascript
复制
    package com.mycompany.MyApp;

import android.app.*;

import android.os.*;
import android.view.Window;
import android.view.WindowManager;
import android.support.v4.content.*;
import android.content.Context;
import androidx.activity.result.*;
import android.provider.*;
import androidx.core.app.*;
import android.content.Intent;
import android.net.Uri;
import android.content.pm.*;
import androidx.activity.result.contract.*;
import androidx.activity.*;
import android.provider.*;
import java.security.*;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.*;

public class MainActivity extends AppCompatActivity{
    
    String[] permissions = {android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE};
    public static MainActivity instance;
    
    public ActivityResultLauncher<Intent> activityResultLauncher;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        activityResultLauncher =
        registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(), 
            new ActivityResultCallback<ActivityResult>(){
                    @Override
                    public void onActivityResult(ActivityResult result){
                }
        });

        setContentView(  new Game(this));
    }
}

这是build.gradle文件

代码语言:javascript
复制
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        applicationId "com.mycompany.MyApp"
        minSdkVersion 14
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation "androidx.activity:activity:1.4.0"
    implementation "androidx.activity:activity:1.2.0-rc01"
    
    compile fileTree(dir: 'libs', include: ['*.jar'])
    Implementation "com.android.support:support-v4:23.+"
    Implementation "com.android.support:appcompat-v7:22.1.0"
}
EN

回答 2

Stack Overflow用户

发布于 2022-01-09 07:02:05

正如注释中所建议的那样,您使用的代码(包括依赖项)是旧的。查看已取代支持库的androidx。“编译”也被反对为“实现”,尽管如此,我已经包含了用结果活动API请求权限的示例代码。

检查对Android 6或更高版本是否授予权限。

代码语言:javascript
复制
    if (Build.VERSION.SDK_INT >= 23) {
                if (ActivityCompat.checkSelfPermission(requireContext(), permissions) != PackageManager.PERMISSION_GRANTED) {
//permissions is a string array for multiple permission else single permission
                    getPermission.launch(permissions);
                }
            }

一个权限的活动结果API

代码语言:javascript
复制
private final ActivityResultLauncher<String> getPermission =
        registerForActivityResult(new ActivityResultContracts.RequestPermission(), new ActivityResultCallback<Boolean>() {
            @Override
            public void onActivityResult(Boolean isGranted) {
                if (isGranted) {
                    //PERMISSION GRANTED DO SOMETHING
                } else {
                    //EXPLAIN TO USER WHY PERMISSION ARE NECESSARY FOR FUNCTINALITY
                }
            }
        });

对于多个权限

代码语言:javascript
复制
private final ActivityResultLauncher<String[]> locationPermissions =
        registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), result -> {
            if (result.containsValue(false)) {
                //one of the permissions is not granted, use result[0] to get result for individual permissions
            } else {
                //all permissions granted do something
            }
        });

最新稳定活动依赖性

代码语言:javascript
复制
implementation 'androidx.activity:activity:1.4.0'

为了碎片

代码语言:javascript
复制
implementation 'androidx.fragment:fragment:1.4.0'
票数 0
EN

Stack Overflow用户

发布于 2022-10-01 04:27:59

你能用这个方法代替ActivityResualtContract.RequestPermission吗..。清理项目并重新构建项目,然后尝试以下方法

代码语言:javascript
复制
ActivityResultLauncher<String> storagePermissionLauncher = registerForActivityResult(new ActivityResultCallback<String> () {
            /**
             * Called when result is available
             *
             * @param result
             */
            @Override
            public void onActivityResult(String result) {
            }
            });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70638626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档