相关疑难解决方法(0)

Android M Permissions:onRequestPermissionsResult()未被调用

我正在更新我们的应用程序以使用新的M权限系统.除了onRequestPermissionsResult()之外,它都在工作.我需要在按下按钮时检查权限,如果成功,则发送短信.当我授予这样做的权限时,对话框会关闭,但在我再次按下按钮之前它不会触发发送文本.

我已经在onRequestPermissionsResult()方法中调试并设置了断点,但它从未进入过它.

首先调用此方法:

    private void askForPermission() {
    String[] permissions = new String[]{Manifest.permission.SEND_SMS};
    ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}
Run Code Online (Sandbox Code Playgroud)

然后我的回调看起来像这样:

    @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == PERMISSIONS_CODE) {
        for (int i = 0; i < permissions.length; i++) {
            String permission = permissions[i];
            int grantResult = grantResults[i];

            if (permission.equals(Manifest.permission.SEND_SMS)) {
                if (grantResult == PackageManager.PERMISSION_GRANTED) {
                    onPPSButtonPress();
                } else {
                    requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过类似的问题?感谢任何帮助.谢谢

java permissions android android-permissions

280
推荐指数
15
解决办法
14万
查看次数

Android上的例外'开放失败:EACCES(权限被拒绝)'

我正进入(状态

开放失败: EACCES (Permission denied)

在线上 OutputStream myOutput = new FileOutputStream(outFileName);

我检查了根,我试过了android.permission.WRITE_EXTERNAL_STORAGE.

我该如何解决这个问题?

try {
    InputStream myInput;

    myInput = getAssets().open("XXX.db");

    // Path to the just created empty db
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // Close the …
Run Code Online (Sandbox Code Playgroud)

android android-permissions android-5.0-lollipop android-storage

249
推荐指数
21
解决办法
38万
查看次数

Android 6.0多重权限

我知道Android 6.0有新的权限,我知道我可以用这样的东西来调用它们

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
    PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
        new String[] { 
            Manifest.permission.WRITE_EXTERNAL_STORAGE
        }, PERMISSION_WRITE_STORAGE);
}
Run Code Online (Sandbox Code Playgroud)

今天我看到了一个需要3个权限的Google应用:联系人,短信和相机.它正在制作第1-3页并同时将它们全部调用以激活.

任何人都可以告诉我如何调用4个权限同时激活短信,相机,联系人和存储?

示例(忘记了谷歌应用程序的名称:()
该应用程序需要短信,联系人和相机

应用程序问我(并进行了对话框1-3)激活短信,激活联系人,然后是相机.所以这个谷歌应用程序一起调用所有3个必需的权限,我的问题是我怎么能得到相同的?

java permissions android android-permissions android-6.0-marshmallow

147
推荐指数
10
解决办法
14万
查看次数

getExternalFilesDir和getExternalStorageDirectory()之间的差异

我知道ExternalFiles将用于API 8及更高版本,而getExternalStorageDirectory则用于7及更低版本.不过我使用之间有点困惑.例如,我想检查一个存在的文件夹,之前您将使用以下内容:

File ChildFolder = new File(Environment.getExternalStorageDirectory() + "/ParentFolder/Child");
Run Code Online (Sandbox Code Playgroud)

但是我看到的每个例子都说使用了getExternalFilesDir(null),File.ext.由于我在API 8以上,我想使用此方法,但我如何检查文件夹?我将在另一点检查文件是否存在但是现在只想查看文件夹是否存在?

TIA JB

android

76
推荐指数
4
解决办法
6万
查看次数

如何检查是否给出了"android.permission.PACKAGE_USAGE_STATS"权限?

背景

我正在尝试获取应用程序启动的统计信息,并且在Lollipop上可以通过使用UsageStatsManager类来实现(原始帖子在这里):

表现:

<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions"/>
Run Code Online (Sandbox Code Playgroud)

打开活动,让用户确认给您这个权限:

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
Run Code Online (Sandbox Code Playgroud)

获取统计数据,汇总:

 private static final String USAGE_STATS_SERVICE ="usagestats"; // Context.USAGE_STATS_SERVICE);
 ...
 final UsageStatsManager usageStatsManager=(UsageStatsManager)context.getSystemService(USAGE_STATS_SERVICE);
 final Map<String,UsageStats> queryUsageStats=usageStatsManager.queryAndAggregateUsageStats(fromTime,toTime);
Run Code Online (Sandbox Code Playgroud)

问题

我似乎无法检查是否授予您所需的权限("android.permission.PACKAGE_USAGE_STATS").到目前为止我所做的一切总是会让人感到被拒绝.

代码有效,但权限检查不起作用.

我试过的

您可以使用以下任一方法检查是否授予了权限:

String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getContext().checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;   
Run Code Online (Sandbox Code Playgroud)

或这个:

String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getPackageManager().checkPermission(permission,getPackageName())== PackageManager.PERMISSION_GRANTED;   
Run Code Online (Sandbox Code Playgroud)

两者总是返回它被拒绝(即使我已经授予用户权限).

看看UsageStatsManager的代码,我试图想出这个解决方法:

      UsageStatsManager usm=(UsageStatsManager)getSystemService("usagestats");
      Calendar calendar=Calendar.getInstance();
      long toTime=calendar.getTimeInMillis();
      calendar.add(Calendar.YEAR,-1);
      long fromTime=calendar.getTimeInMillis();
      final List<UsageStats> queryUsageStats=usm.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,fromTime,toTime);
      boolean granted=queryUsageStats!=null&&queryUsageStats!=Collections.EMPTY_LIST;
Run Code Online (Sandbox Code Playgroud)

它工作,但它仍然是一个解决方法.

这个问题

为什么我没有得到权限检查的正确结果?

应该怎么做才能更好地检查?

permissions android usage-statistics android-recents usagestatsmanager

40
推荐指数
2
解决办法
2万
查看次数

Android运行时权限 - 如何实现

Android Developer Documentation提供了在运行时请求权限的示例:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // …
Run Code Online (Sandbox Code Playgroud)

java permissions android android-6.0-marshmallow

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

Android Marshmallow 6.0在运行时请求权限

我正在测试我的应用程序Marshmallow 6.0,它正在关闭android.permission.READ_EXTERNAL_STORAGE,即使已经在Manifest中定义了它.在某处我读过,如果我在运行时请求权限,那么它就不会强行关闭你的应用程序.我也读过这个android文档,用于请求运行时权限.

所以,我开始知道我们可以请求android文档中提到的下面的权限.

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS); …
Run Code Online (Sandbox Code Playgroud)

java android android-6.0-marshmallow runtime-permissions

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

如何询问Camera的运行时权限

我正在做一个按钮点击扫描条形码的应用程序,它可以正常工作到Lollipop版本.当我来到棉花糖时,它停止了工作.这是错误:

camerabase连接到相机0时发生错误

它迫使我通过以下方式开启许可:

设置 - >应用程序 - >我的应用程序 - >相机.

我的问题是如何在Marshmallow中自动允许我的应用程序使用相机,或者要求用户在运行时打开相机.屏幕截图:

在此输入图像描述

android barcode android-camera android-6.0-marshmallow runtime-permissions

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

请求WRITE_EXTERNAL_STORAGE权限的正确方法

我一直在努力弄清楚存储系统如何在Android上运行.现在我被困在请求WRITE_EXTERNAL_STORAGE的许可,我使用的是Android 7.1.1.这是我的代码:

int check = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        if (check == PackageManager.PERMISSION_GRANTED) {
            //Do something
        } else {
            requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1024);
        }
Run Code Online (Sandbox Code Playgroud)

更新:所以代码确实有效,之前它没有用,因为我在AndroidManifest.xml中输入了一个拼写错误,谢谢你的帮助!

android runtime-permissions

7
推荐指数
2
解决办法
2万
查看次数

尽管获得许可,但写入外部存储器的权限仍被拒绝

我有一个Android 7.0测试设备和我的APK目标="targetSdkVersion 22",有:

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

有:

final File f = new 
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + "DressUpBaby" + photonumber + ".png");
f.createNewFile();
Run Code Online (Sandbox Code Playgroud)

在这一点上,我得到警告:

W/System.err: java.io.IOException: Permission denied
Run Code Online (Sandbox Code Playgroud)

如何保存文件?当我在Eclipse上创建它时,这是有效的,但是现在我已经更新并转移到Android Studio,它似乎已经破坏了一些东西.

android android-permissions

7
推荐指数
4
解决办法
2万
查看次数