0

Я очень новичок в Android Studio, а также в программировании для Android. Я только что прочитал о первом обычном учебнике Intent, речь идет о AlarmClock. Я пытался писать простой код, чтобы проверить, что Intent, но это не работает с SecurityException брошенной, трассировки стека выглядит следующим образом:получить отказ в разрешении, даже при использовании <uses-permission> для SET_ALARM?

05-20 15: 36: 25,010 2342-2342/com.viphalong.helloandroid E/AndroidRuntime: FATAL EXCEPTION: main Процесс: com.viphalong.helloandroid, PID: 2342 java.lang.RuntimeException: Не удалось запустить активность ComponentInfo {com.viphalong.helloandroid/com.viphalong.helloandroid.MainActivity}: java.lang .SecurityException: Отказ разрешения: начало Intent {act = android.intent.action.SET_ALARM cmp = com.android.deskclock/.HandleApiCalls (имеет дополнительные функции)} из ProcessRecord {ad271560 2342: com.viphalong.helloandroid/u0a52} (pid = 2342, uid = 10052) требует com.android.alarm.permission.SE T_ALARM в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2184) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2233) в android.app.ActivityThread.access $ 800 (ActivityThread.java:135) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1196) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:136) на android.app.ActivityThread.main (ActivityThread.java:5001) на java.lang.reflect.Method.invokeNative (собственный метод) на java.lang.re flect.Method.invoke (Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main (ZygoteInit. java: 601) at dalvik.system.NativeStart.main (Native Method) Вызвано: java.lang.SecurityException: Разрешение Отказ: начало Intent {act = android.intent.action.SET_ALARM cmp = com.android.deskclock/.HandleApiCalls (имеет дополнительные функции)} из ProcessRecord {ad271560 2342: com.viphalong.helloandroid/u0a52} (pid = 2342, uid = 10052) требует com.android.alarm.permission.SET_ALARM на android.os.Parcel.readException (Parcel.java:1465) at android.os.Parcel.readException (Parcel.java:1419) на android.app.ActivityManagerProxy.startActivity (ActivityManagerNative.java:2096) на android.app.Instrumentation.execStartActivity (Instrumentation.java:1419) на android.app.Activity.startActivityForResult (Activity.java:3424) на android .app.Activity.startActivityForResult (Activity.java:3385) на android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:842) на android.app.Activity.startActivity (Activity.java:3627) at android.app.Activity.startActivity (Activity.java:3595) at com.viphalong.helloandroid.MainActivity.createAlarm (MainActivity.java:22) на com.viphalong.helloandroid.MainActivity.onCreate (MainActivity.java:14) на android.app.Activity.performCreate (Activity.java:5231) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2148) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2233) at android.app.ActivityThread.access $ 800 (ActivityThread.java: 135) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1196) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper. java: 136) at android.app.ActivityThread.main (ActivityThread.java:5001) по адресу java.lang.reflect.Method.invokeNative (собственный метод) по адресу java.lang.reflect.Method.invoke (Method.java : 515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:601) at dalvik.system , NativeStart.main (Native Method)

Вот файл манифеста:

<?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"/> 

в файле манифеста. Но исключение по-прежнему бросает меня в замешательство.

+0

Что такое уровень api устройства, на котором вы тестируете? –

+0

@SurenderKumar уровень API равен 19 – Hopeless

+0

@Hopeless см. Мой ответ ниже. – Ironman

ответ

1

Что такое Android-версия, вы пытаетесь ее реализовать. Раньше я сталкивался с подобной проблемой, когда тестировал на Android 6.0. Мне пришлось вручную перейти к разрешению приложения и включить разрешение для него.

Альтернативно вы можете проверить нижеследующую ссылку. https://developer.android.com/training/permissions/requesting.html

Это поможет вам проверить, предоставил ли пользователь разрешение на использование данного приложения.

Надеюсь, это вам поможет. Хорошего дня!!

+0

Устройство было протестировано против уровня API 19, так ли это? – Hopeless

+1

Я пробовал вам код, и он отлично работал в API уровня 19. Вы можете попробовать очистить проект и перестроить. Позвольте мне знать, что вы получаете после этого. –

+0

отличная работа, чистка и восстановление. Как и прежде, я помещаю строку в неподходящее место, и после ее исправления она все равно может запускать старую сборку. Спасибо! – Hopeless

0

Если вы используете android M, тогда вам нужно проверить разрешение во время выполнения, потому что в android M можно удалить разрешение.

+0

Можете ли вы приложить больше усилий в ответ, потому что я не совсем понимаю некоторые вещи здесь, например, о android M. Также я не понимаю, почему нам нужно проверить разрешение здесь, если это какое-то разрешение, установленное пользователем , Я могу включить это разрешение через Phone OS, а затем запустить мое приложение. То, что я хочу здесь, - это простое приложение, на данный момент я действительно не хочу смотреть расширенный код. Спасибо. – Hopeless