context.startActivity时报错startActivity() from outside of an Activity context require the FLAG_ACTIVITY_NEW_TASK flag

摘要:
源代码如下:1publicclassReceiveHandlerextendsBroadcastReceiver{23privatefinalStringACTION_RECE_LinkReply="com.hutao.linkRequestReceive";4privateContextcontext;5privateintReceiveNumber;6privatebytebusinessTy

源代码如下:

1 public class ReceiveHandler extendsBroadcastReceiver{
2 
3     private final String ACTION_RECE_LinkReply="com.hutao.linkRequestReceive";
4     privateContext context;
5     private intReceiveNumber;
6     private bytebusinessType;
7 @Override
8     public voidonReceive(Context context, Intent intent) {
9         //TODO Auto-generated method stub
10         this.context=context;
11         if(intent.getAction().equals(ACTION_RECE_LinkReply)) {
12             ReceiveNumber=intent.getIntExtra("number", 0);
13             businessType=intent.getByteExtra("businessType", (byte) 0);
14             switch(businessType) {
15                 caseDataReceive.AUDIO_CONNECT:
16 audioHandle();                    
17                     break;
18     
19                 default:
20                     break;
21 }
22             
23 }
24         
25 }
26     private voidaudioHandle() {
27         //TODO Auto-generated method stub
28         AlertDialog builder=new AlertDialog.Builder(context).setTitle("注意:")
29 .setIcon(R.drawable.dailog_icon)
30                 .setMessage("MS0"+ReceiveNumber+"请求建立语音连接,是否同意?")
31                 .setPositiveButton("同意", newDialogInterface.OnClickListener() {
32                     
33 @Override
34                     public void onClick(DialogInterface arg0, intarg1) {
35                         //TODO Auto-generated method stub
36                         /*发送语音连接请求,同意接收*/
37                         System.out.println("进入语音连接请求中……………………");
38                         new Thread(new DataSend(CreateSignal.LinkReply(businessType))).start();/*发送连接请求同意信令,businessType业务类型*/
39                         new Thread(new DataSend(CreateSignal.AudioReceive())).start();/*发送音频接收操作命令*/
40                         Intent audioIntent=new Intent(context,PhoneInterface.class);
41 audioIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
42 context.startActivity(audioIntent);
43 }
44 })
45                 .setNegativeButton("取消", newDialogInterface.OnClickListener() {
46                     
47 @Override
48                     public void onClick(DialogInterface arg0, intarg1) {
49                         //TODO Auto-generated method stub
50                         
51 }
52 }).create();
53 builder.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
54 builder.show();
55 }
56 
57 }

在没有audioIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);这句时候程序会报错,报错内容如下:

1 06-28 11:24:40.359: E/AndroidRuntime(7397): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
2 06-28 11:24:40.359: E/AndroidRuntime(7397):     at android.app.ContextImpl.startActivity(ContextImpl.java:617)
3 06-28 11:24:40.359: E/AndroidRuntime(7397):     at android.content.ContextWrapper.startActivity(ContextWrapper.java:258)
4 06-28 11:24:40.359: E/AndroidRuntime(7397):     at com.hotalk.ui.homepage.favorites.FavoritesListAdapter$7.onClick(FavoritesListAdapter.java:1509)
5 06-28 11:24:40.359: E/AndroidRuntime(7397):     at android.view.View.performClick(View.java:2408)
6 06-28 11:24:40.359: E/AndroidRuntime(7397):     at android.view.View$PerformClick.run(View.java:8816)
7 06-28 11:24:40.359: E/AndroidRuntime(7397):     at android.os.Handler.handleCallback(Handler.java:587)
8 06-28 11:24:40.359: E/AndroidRuntime(7397):     at android.os.Handler.dispatchMessage(Handler.java:92)
9 06-28 11:24:40.359: E/AndroidRuntime(7397):     at android.os.Looper.loop(Looper.java:123)
10 06-28 11:24:40.359: E/AndroidRuntime(7397):     at android.app.ActivityThread.main(ActivityThread.java:4627)
11 06-28 11:24:40.359: E/AndroidRuntime(7397):     at java.lang.reflect.Method.invokeNative(Native Method)
12 06-28 11:24:40.359: E/AndroidRuntime(7397):     at java.lang.reflect.Method.invoke(Method.java:521)
13 06-28 11:24:40.359: E/AndroidRuntime(7397):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
14 06-28 11:24:40.359: E/AndroidRuntime(7397):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
15 06-28 11:24:40.359: E/AndroidRuntime(7397):     at dalvik.system.NativeStart.main(Native Method)

报错的原因:

Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

Context中有一个startActivity方法,Activity继承Context,重载了startActivity方法。如果使用的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是:加一个flag,audioIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

免责声明:文章转载自《context.startActivity时报错startActivity() from outside of an Activity context require the FLAG_ACTIVITY_NEW_TASK flag》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇maven pom 属性介绍MySQL中REGEXP正则表达式使用大全下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

swift 画虚线

1. CAShapeLayer:适用于 动态显示 虚线, 通过控制添加虚线view的 ishidden 控制虚线的显示隐藏 ///绘制虚线 ///- Parameters: ///- lineView: 添加虚线的view ///- strokeColor: 虚线颜色 ///- lineWidth: 虚线宽度...

Spring Test 整合 JUnit 4 使用总结

转自:https://blog.csdn.net/hgffhh/article/details/83712924 这两天做Web开发,发现通过spring进行对象管理之后,做测试变得复杂了。因为所有的Bean都需要在applicationContext.xml中加载好,之后再通过@Resource去取得。如果每次都要整个业务流做的差不多了再去测试,这样效率...

彻底搞懂Spring类加载(注解方式)

单例预加载默认 单例懒加载   正确的加载时机   错误的加载时机 多例懒加载仅支持懒加载 spring beanfactory类高级用法   反射方式加载类 需要注意的问题 通过 Spring 注册的类一共只有三种加载方式! 环境:spring-context 4.2.6jdk 8Eclipse 4.7 最简单的配置 <?xml ve...

canvas动画—圆形扩散、运动轨迹

介绍 在ECharts中看到过这种圆形扩散效果,类似css3,刚好项目中想把它用上,but我又不想引入整个echart.js文件,更重要的是想弄明白它的原理,所以自己动手。在这篇文章中我们就来分析实现这种效果的两种方法,先上效果图: 实现原理 通过不断的改变圆的半径大小,不断重叠达到运动的效果,在运动的过程中,设置当前canvas的透明度context....

AutoMapper(三)

返回总目录 自定义类型转换 有时,需要完全控制一个类型到另一个类型的转换。一个类型一点都不像另一个类型,而且转换函数已经存在了,在这种情况下,你想要从一个“宽松”的类型转换成一个更强壮的类型,例如一个string的源类型到一个int32的目标类型。 这里有两个类Source和Destination,要把前者映射到后者,代码如下: public class...

Android显示GIF图片

今天我们研究一下怎样在Android手机上显示GIF动态图片 首先须要在src文件夹下新建一个自己定义的View。代码例如以下: </pre><pre name="code" class="java"> </pre><pre name="code" class="java"> import android...