Launching an Activity from a Service
When I am trying to launch a call activity from a Service, I get a NullPointerException
. Here is my code:
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + number));
callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(callIntent);
I get the exception on the startActivity
line.
I tried to use getApplication.startActivity
and getApplicationContext.startActivity
but no luck.
Any ideas?
edit : Maybe some usefull info: I am trying to create a service that will run on the background and scan sensor data, when a certain signal is given i would like to maken an automated call to a number.
edit : full adb error code:
03-31 09:04:10.214: ERROR/AndroidRuntime(1896): Uncaught handler: thread main exiting due t开发者_StackOverflowo uncaught exception
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): java.lang.RuntimeException: Unable to instantiate service dfz.epilepsiedetector.services.DetectionService: java.lang.NullPointerException
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2668)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.app.ActivityThread.access$3100(ActivityThread.java:116)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1846)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.os.Handler.dispatchMessage(Handler.java:99)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.os.Looper.loop(Looper.java:123)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.app.ActivityThread.main(ActivityThread.java:4203)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at java.lang.reflect.Method.invokeNative(Native Method)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at java.lang.reflect.Method.invoke(Method.java:521)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at dalvik.system.NativeStart.main(Native Method)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): Caused by: java.lang.NullPointerException
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.content.ComponentName.<init>(ComponentName.java:75)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.content.Intent.<init>(Intent.java:2302)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at dfz.epilepsiedetector.services.DetectionService.<init>(DetectionService.java:35)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at java.lang.Class.newInstanceImpl(Native Method)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at java.lang.Class.newInstance(Class.java:1472)
03-31 09:04:10.226: ERROR/AndroidRuntime(1896): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2665)
edit Trimmed class code:
public class DetectionService extends IntentService implements SensorEventListener
{
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private boolean hasSeizure = false;
private final int POLLS_PER_SECOND = 10;
public DetectionService()
{
super("EpilepsionDetectionService");
Intent callIntent = new Intent(DetectionService.this,
InformationActivity.class);
callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(callIntent);
}
You have to get that context from an activity where you calling a service.. from that you have to call`
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + number));
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(callIntent);
edit:
callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(callIntent);`
`
hope it helps...
You can try:
getBaseContext().startActivity(callIntent);
Or use:
this.startActivity(callIntent);
For future reference:
The problem went away when inhereting directly from Service as opposed to Intent service.
Hop this helps!
Move the code out of the constructor and into the onCreate()
method. The long and short of it is that the class hasn't been totally initialized yet and is causing the NullPointerException
.
Call the intent in the onStart
method of the service instead of the onCreate
method.
精彩评论