Я очень новичок в 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"/>
в файле манифеста. Но исключение по-прежнему бросает меня в замешательство.
Что такое уровень api устройства, на котором вы тестируете? –
@SurenderKumar уровень API равен 19 – Hopeless
@Hopeless см. Мой ответ ниже. – Ironman