当我开发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);
但它显示了同样的错误。如何解决请帮助我。
答案 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
标志以开始新活动。