J'essaie de tester mon module d'alarme.Test instrumenté lié à PendingIntent.getBroadcast()
Dans le test instrumenté, j'essaie d'utiliser et de définir une alarme avec le service d'alarme du système.
AlarmManager alarmMgr = (AlarmManager)
getInstrumentation().getContext().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent("ACTION_TIMEOUT_REACHED", null,
getInstrumentation().getContext(),ALARM_RECEIVER.class);
intent.putExtra("PARAM_ID", "123");
PendingIntent alarmIntent=PendingIntent.getBroadcast(getInstrumentation().getContext(), 0, intent, 0);
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + millisecondUntilExpire, alarmIntent);
Lors de l'exécution du test, je rencontre l'erreur suivante
java.lang.SecurityException: Permission Denial: getIntentSender() from pid=27923, uid=10332, (need uid=10333) is not allowed to send as package org.abc.full.test
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1499)
at android.app.ActivityManagerProxy.getIntentSender(ActivityManagerNative.java:4346)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:511)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:495)
at org.abc.TimeoutAlarmTest.java:68)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1889)
Ma question est de savoir comment résoudre ce problème? C'est parce que mon domaine de package est différent de la déclaration du package Manifest? Ma déclaration de fichier Manifest est le suivant
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.abc.def">
au lieu de
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.abc.full.test">