从服务启动活动

时间:2011-03-31 08:02:18

标签: android

当我尝试从服务启动呼叫活动时,我得到NullPointerException。这是我的代码:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + number));
callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(callIntent);

我在startActivity行上获得了例外。

我尝试使用getApplication.startActivitygetApplicationContext.startActivity,但没有运气。

有什么想法吗?

编辑:也许一些有用的信息:我正在尝试创建一个将在后台运行并扫描传感器数据的服务,当给出某个信号时,我希望自动调用一个号码。

修改:完整的adb错误代码:

03-31 09:04:10.214: ERROR/AndroidRuntime(1896): Uncaught handler: thread main exiting due to 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)

修改修剪后的课程代码:

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);
}

5 个答案:

答案 0 :(得分:1)

您必须从调用服务的活动中获取该上下文。 从那你必须打电话给`

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + number));


 callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 context.startActivity(callIntent);

修改

callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(callIntent);`

`

希望它有所帮助...

答案 1 :(得分:0)

您可以尝试:

getBaseContext().startActivity(callIntent);

或使用:

this.startActivity(callIntent);

答案 2 :(得分:0)

供将来参考:

直接从Service继承而不是Intent服务时,问题就消失了。

跳这个有帮助!

答案 3 :(得分:0)

将代码移出构造函数并移入onCreate()方法。它的长短是因为该类尚未完全初始化并导致NullPointerException

答案 4 :(得分:-1)

使用服务的onStart方法而不是onCreate方法调用意图。