首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与android应用程序Google同步权限

与android应用程序Google同步权限
EN

Stack Overflow用户
提问于 2021-01-03 20:55:47
回答 1查看 645关注 0票数 0

我正在与android工作室一起创建一个应用程序,我正在使用Google应用来同步这两个应用程序,以便通过Mi获得一些测量数据。问题是我的手机中没有弹出“获取权限”窗口,我也不知道为什么。这是我的许可课:

代码语言:javascript
复制
package Model.Users;

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInOptionsExtension;
import com.google.android.gms.fitness.FitnessOptions;

import static com.google.android.gms.fitness.data.DataType.TYPE_ACTIVITY_SEGMENT;
import static com.google.android.gms.fitness.data.DataType.TYPE_CALORIES_EXPENDED;
import static com.google.android.gms.fitness.data.DataType.TYPE_DISTANCE_DELTA;
import static com.google.android.gms.fitness.data.DataType.TYPE_STEP_COUNT_DELTA;

public class Permissions {

    private AppCompatActivity app;
    final private int ALL_PERMISSIONS = 101;

    public Permissions(AppCompatActivity app) {
        this.app = app;
    }

    /**
     *
     * @throws PackageManager.NameNotFoundException
     */
    public void requestPermissions() throws PackageManager.NameNotFoundException {
        PackageInfo info = app.getPackageManager().getPackageInfo(app.getPackageName(), PackageManager.GET_PERMISSIONS);
        String[] permissions = info.requestedPermissions;//This array contains the requested permissions.

        Log.i("PERMISSIONS", "************PERMISSIONS LIST*************");

        ActivityCompat.requestPermissions(app, permissions, ALL_PERMISSIONS); /** gets all permissions from manifest! */

        // insert all permissions needed
        GoogleSignInOptionsExtension fitnessOptions =
                FitnessOptions.builder()
                        .addDataType(TYPE_STEP_COUNT_DELTA,FitnessOptions.ACCESS_READ)
                        .addDataType(TYPE_DISTANCE_DELTA, FitnessOptions.ACCESS_READ)
                        .addDataType(TYPE_CALORIES_EXPENDED,FitnessOptions.ACCESS_READ)
                        .addDataType(TYPE_ACTIVITY_SEGMENT,FitnessOptions.ACCESS_READ)
                        .build();

        if (!GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(app), fitnessOptions)) {
            GoogleSignIn.requestPermissions( app,1, GoogleSignIn.getLastSignedInAccount(app),
                    fitnessOptions);
            Log.i("PERMISSIONS", "************PERMISSIONS REQUESTED*************");

        }
    }
}

我得到的第一个屏幕是选择google帐户:

总是这样,我应该得到这个屏幕,但我几乎从来没有这样做:

然后会弹出审批地点的最后屏幕:

不知道为什么第二个屏幕不显示,我必须获得这些权限来管理使用google-fit收集的数据。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 21:03:18

将您的逻辑放在它自己的函数中,在onCreate()之外。

代码语言:javascript
复制
private void youLogic() {
    // some code
}

如果授予了权限,只需直接从onCreate()调用该函数:

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    //...
    if (checkSelfPermissions(/*whatever*/) {
        youLogic();
    } else {
        requestPermissions(/*whatever*/);
    }

    //nothing dependent on runtime permissions after this point
}

然后重写onRequestPermissionsResult():

代码语言:javascript
复制
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == /*whatever you set in requestPermissions()*/) {
        if (!Arrays.asList(grantResults).contains(PackageManager.PERMISSION_DENIED)) {
            //all permissions have been granted
            youLogic(); //call your dependent logic
        }
    }
}

您还可以检查清单中的所有权限:

代码语言:javascript
复制
if(permissions.Contains(info)) {
  
  // request all other permissions here
  .
  .
  .
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65554838

复制
相关文章

相似问题

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