转:http://hi.baidu.com/huaxinchang/item/e1a771cf4d424312b77a2416
昨天做了一个Activity的启动动画,效果是点击桌面图标先出现动画后启动Activity,今天想让其开机启动,于是我写了一个类BootReceiver.java用于接收开机广播,启动动画效果,代码如下:
public
class BootReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
Log.d("splashscreen",
"SplashScreen---------->>>>>>>>BootReceiver");
Intent splash=new
Intent(context,SplashScreen.class);
context.startActivity(splash);
}
}
}
调试程序的时候发现其并未开机启动,使用adb logcat发现报了如下的错误。
E/JavaBinder( 2252): *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
E/JavaBinder( 2252): android.util.AndroidRuntimeException: Calling
startActivity() from outside of an Activity context requires the
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
E/JavaBinder(
2252): at
android.app.ContextImpl.startActivity(ContextImpl.java:622)
E/JavaBinder(
2252): at
com.android.server.ConnectivityService.sendBugReportToServer(ConnectivityService.java:2055)
E/JavaBinder(
2252): at
com.android.server.ConnectivityService.startUsingNetworkFeature(ConnectivityService.java:725)
E/JavaBinder(
2252): at
android.net.IConnectivityManager$Stub.onTransact(IConnectivityManager.java:135)
E/JavaBinder(
2252): at
android.os.Binder.execTransact(Binder.java:288)
E/JavaBinder(
2252): at dalvik.system.NativeStart.run(Native
Method)
借用高人分析:
Context
中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用Activity的
startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是,加一个flag。在context.startActivity(splash)之前加上
splash.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
这样就可以在新的task里面启动这个Activity了。