当前位置: 首页 > 知识库问答 >
问题:

即使在对SET_ALARM使用时,也会获得权限拒绝?

步弘和
2023-03-14

我对Android Studio和Android编程都很陌生。我刚刚读了关于第一个common Intent教程的内容,它是关于AlarmClock。我试着编写一个简单的代码来测试这个意图,但是抛出的SecurityException无效,堆栈跟踪如下所示:

05-20 15:36:25.010 2342-2342/com。维法隆。helloandroid E/AndroidRuntime:致命异常:主进程:com。维法隆。helloandroid,PID:2342 java。lang.RuntimeException:无法启动活动组件信息{com.viphalong.helloandroid/com.viphalong.helloandroid.MainActivity}:java。lang.SecurityException:权限拒绝:从ProcessRecord{ad271560 2342:com.viphalong.helloandroid/u0a52}(pid=2342,uid=10052)启动Intent{act=android.Intent.action.SET_ALARM cmp=com.android.deskclock/.handleappicalls(有额外功能)}需要com.Android惊恐准许在Android上设置警报。应用程序。活动线程。在android上执行LaunchActivity(ActivityThread.java:2184)。应用程序。活动线程。android上的handleLaunchActivity(ActivityThread.java:2233)。应用程序。活动线程。在Android上获得800美元(ActivityThread.java:135)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1196)。操作系统。汉德勒。android上的dispatchMessage(Handler.java:102)。操作系统。活套。android上的loop(Looper.java:136)。应用程序。活动线程。java上的main(ActivityThread.java:5001)。朗,反思一下。方法java上的Invokenactive(本机方法)。朗,反思一下。方法在com上调用(Method.java:515)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(zyteinit.java:785)。Android内部的操作系统。合子体。dalvik的main(ZygoteInit.java:601)。系统原生艺术。主要(本机方法)由以下原因引起:java。lang.SecurityException:权限拒绝:从ProcessRecord{ad271560 2342:com.viphalong.helloandroid/u0a52}(pid=2342,uid=10052)启动Intent{act=android.Intent.action.SET_ALARM cmp=com.android.deskclock/.handleappicalls(有额外功能)}需要com.Android惊恐准许在Android上设置警报。操作系统。包裹android上的readException(Parcel.java:1465)。操作系统。包裹android上的readException(Parcel.java:1419)。应用程序。活动管理器氧气。android上的startActivity(ActivityManagerActive.java:2096)。应用程序。仪器。android上的execStartActivity(Instrumentation.java:1419)。应用程序。活动android上的startActivityForResult(Activity.java:3424)。应用程序。活动android上的startActivityForResult(Activity.java:3385)。支持v4。应用程序。碎片活动。android上的startActivityForResult(FragmentActivity.java:842)。应用程序。活动android上的startActivity(Activity.java:3627)。应用程序。活动startActivity(Activity.java:3595)位于com。维法隆。helloandroid。主要活动。com上的createAlarm(MainActivity.java:22)。维法隆。helloandroid。主要活动。android上的onCreate(MainActivity.java:14)。应用程序。活动android上的performCreate(Activity.java:5231)。应用程序。仪器。android上的callActivityOnCreate(Instrumentation.java:1087)。应用程序。活动线程。在android上执行LaunchActivity(ActivityThread.java:2148)。应用程序。活动线程。handleLaunchActivity(ActivityThread.java:2233)

以下是清单文件:

<?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.viphalong.helloandroid">
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
    <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>

      </activity>
    </application>

   </manifest>

这里是主要代码:

package com.viphalong.helloandroid;

import android.content.Intent;
import android.provider.AlarmClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //try creating a simple alarming
        createAlarm("Welldone", 0, 1);
    }
    void createAlarm(String msg, int hours, int minutes){
        Intent it = new Intent(AlarmClock.ACTION_SET_ALARM);
        it.putExtra(AlarmClock.EXTRA_MESSAGE, msg)
          .putExtra(AlarmClock.EXTRA_HOUR, hours)
          .putExtra(AlarmClock.EXTRA_MINUTES, minutes);
        if(it.resolveActivity(getPackageManager()) != null){
          startActivity(it);
        }
    }
}

如你所见,我把线

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

在清单文件中。但是异常仍然被抛出,这让我非常困惑。

共有3个答案

戎洛华
2023-03-14

如果您使用的是AndroidM,则需要检查运行时权限,因为AndroidM可以删除权限。

柳和怡
2023-03-14

什么是Android版本,你试图实现它。我以前在Android6.0上测试时也遇到过类似的问题。我不得不手动转到应用程序权限,并打开相同的权限。

或者,您可以检查下面的链接。https://developer.android.com/training/permissions/requesting.html

这将帮助您检查用户是否已授予应用的权限。

希望这对你有帮助。祝您有个美好的一天!!

谷梁博易
2023-03-14

尝试添加两个权限...

我也遇到过类似的问题。。。通过添加两个权限来解决。。

 类似资料:
  • 编辑:此处不允许的消息不再显示。 我正在使用Volley访问google books,api是IcecreamSandwich。即使包括对清单文件的权限,我仍然会得到关于权限的异常。我已经读了一些已回答的问题(这个,这个)。当光标指向时,表示此处不允许使用该标记。我该如何解决问题呢? logcat:

  • 我有一个针对SDK28的Android应用程序,所以我有处理的权限。我检查是否设置了,但当Exoplayer尝试读取文件(我验证该文件确实存在)时,我看到 com.google.android.exoplayer2.upstream.filedatasource$filedatasourceException:java.io.fileNotfoundexception:/storage/emula

  • 我分配一个角色权限来创建数据库。相同的角色被分配给登录用户,但是当我试图使用分配角色的登录用户创建新数据库时,我得到权限拒绝错误。 无法执行语句。权限拒绝,数据库主,所有者dbo。运行此命令需要以下权限:CREATE DATABASE。赛贝斯错误代码=10331严重级别=14,状态=3,事务状态=0第1行 我用15.5分和16分试了一下。我做错什么了吗?我们需要考虑其他参数吗?我经历了这次讨论 h

  • 我的清单里有这个: 这是我尝试创建和写入文件的地方(它在一个名为的文件中): 当我尝试创建文件时,会显示以下内容: 如您所见,它在此处打印,表示授予了权限,但紧接着出现了“权限被拒绝”错误。有没有办法解决这个问题? 编辑:在旁注上,当它说它试图保存到数据/用户/0/cs时。cscb07courseproject/files,是在项目中还是保存在我的计算机上?因为当我去我的终端做cd/data或cd

  • 我面临一个关于Android应用程序新版本发布的问题。 场景: 我在2个月前(2020年12月)将初始flutter android应用程序上传到google play商店,即使在代码中没有使用,我们也意外添加了位置权限。(只是在Android清单中添加了权限)。 现在我们提出了新版本的flutter android应用程序并尝试创建新的Release版本1.0.2,它在提交新版本的应用程序时显示