Android启动活动显示错误

时间:2017-01-19 10:41:45

标签: android android-activity android-framelayout android-phone-call

当我开发Android应用程序时。我想以编程方式拨打电话号码。使用

Uri number = Uri.parse("tel:123456789");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
getContext().startActivity(callIntent);

显示错误。我正在使用FrameLayout而不是Activity。

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:1366)
at android.app.ContextImpl.startActivity(ContextImpl.java:1353)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:322)
at com.happiness.lockscreenlibrary.view.LockView$1.onDrag(LockView.java:163)
at android.view.View.dispatchDragEvent(View.java:18339)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1492)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1478)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1478)
at android.view.ViewRootImpl.handleDragEvent(ViewRootImpl.java:5143)
at android.view.ViewRootImpl.access$700(ViewRootImpl.java:108)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3331)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)

我使用context.getApplicationContext().startActivity(callIntent);context.startActivity(callIntent);代替getContext().startActivity(callIntent); 但它显示了同样的错误。如何解决请帮助我。

6 个答案:

答案 0 :(得分:2)

要从服务开始活动,或者除了其他活动之外,您必须在意图中添加标记FLAG_ACTIVITY_NEW_TASK

Uri number = Uri.parse("tel:123456789");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
callIntent .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(callIntent);

答案 1 :(得分:2)

您必须添加 setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

  

如果设置,此活动将成为此任务的新任务的开始   历史堆栈。

Uri number = Uri.parse("tel:123456789");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(callIntent);

答案 2 :(得分:1)

Uri number = Uri.parse("tel:123456789");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(callIntent);
// use getActivity().startActivity(callIntent); if you are inside a fragment

您可以在此处获取有关意图标志的信息:

https://developer.android.com/reference/android/content/Intent.html

  

FLAG_ACTIVITY_NEW_TASK如果设置,此活动将成为开始   这个历史堆栈上的新任务。

答案 3 :(得分:1)

使用FLAG_ACTIVITY_NEW_TASK调用 startActivity 。 logcat指出错误,你仍然把它发布在SO

Uri number = Uri.parse("tel:123456789");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
callIntent .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(callIntent);

答案 4 :(得分:0)

尝试在意图中添加标记:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

您的代码将是

Uri number = Uri.parse("tel:123456789");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(callIntent);
希望能帮到你!

答案 5 :(得分:0)

您应该使用构造函数将上下文从活动传递到视图。

new LockView(this);

使用相同的上下文开始新活动。

   Uri number = Uri.parse("tel:123456789");
    Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
    callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(callIntent);

添加Intent.FLAG_ACTIVITY_NEW_TASK标志以开始新活动。