0

当我开发一个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);or context.startActivity(callIntent);代替了getContext().startActivity(callIntent); 但是它显示了同样的错误。它将如何解决请帮助我。

4

6 回答 6

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);
于 2017-01-19T10:43:18.500 回答
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);
于 2017-01-19T10:44:13.157 回答
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);
于 2017-01-19T10:56:10.333 回答
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 如果设置,此活动将成为此历史堆栈上新任务的开始。

于 2017-01-19T10:48:33.950 回答
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);

希望能帮到你!

于 2017-01-19T10:44:05.087 回答
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标志以开始新活动。

于 2017-01-19T10:49:12.793 回答