2013-07-20 44 views
2

我创建了一个覆盖“始终在顶部按钮”,这是一个服务HUD,我不能从那里启动一个活动screen,它给出了错误:"Unfortunately App has stopped"。在开始时,我曾经知道是否有任何TouchEvent是烤面包,而烤面包是创建的,但是它是全部创建的,所以我不知道它是否给出了这个错误,因为这个代码是TouchEvent身体,也重复整个次。 这里是我的代码:从服务启动活动不工作(android)

public class HUD extends Service implements OnClickListener, OnTouchListener, OnLongClickListener { 
Button mButton; 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    //mView = new HUDView(this); 


    mButton = new Button(this); 
    mButton.setId(1); 
    mButton.setText("Button"); 
    mButton.setClickable(true); 
    mButton.setOnTouchListener(this); 


    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
        WindowManager.LayoutParams.WRAP_CONTENT, 
        WindowManager.LayoutParams.TYPE_PHONE, 
        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
        PixelFormat.OPAQUE); 

    params.gravity = Gravity.LEFT | Gravity.TOP; 
    params.setTitle("Load Average"); 
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
    wm.addView(mButton, params); 


} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if(mButton != null) 
    { 
     ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mButton); 
     mButton = null; 
    } 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if(event.getX()<mButton.getWidth() & event.getY()>0) 
    { 
    Toast.makeText(this,"Overlay button event", Toast.LENGTH_SHORT).show(); //this my toast 
    Intent i = new Intent();            //this is my new acivity (intent) 
    i.setClass(HUD.this, screen.class); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(i); 
    HUD.this.stopSelf(); 
    } 
    return false; 
} 


@Override 
public void onClick(DialogInterface dialog, int which) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this,"Click", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public boolean onLongClick(View v) { 
    // TODO Auto-generated method stub 
    System.exit(1); 
    return false; 
} 

} 

所以,正在重复我的问题上TouchEvent体这段代码severall次?如果是,那是错误的原因吗?谢谢。

日志猫:

07-20 22:11:06.962: I/Choreographer(1620): Skipped 52 frames! The application may be doing too much work on  its main thread. 
07-20 22:11:08.062: D/AndroidRuntime(1620): Shutting down VM 
07-20 22:11:08.062: W/dalvikvm(1620): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
07-20 22:11:08.132: E/AndroidRuntime(1620): FATAL EXCEPTION: main 
07-20 22:11:08.132: E/AndroidRuntime(1620): android.app.SuperNotCalledException: Activity {com.example.screenshot/com.example.screenshot.screen} did not call through to super.onCreate() 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2146) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at android.os.Looper.loop(Looper.java:137) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-20 22:11:08.132: E/AndroidRuntime(1620):  at dalvik.system.NativeStart.main(Native Method) 

screen.java:

public class screen extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
Toast.makeText(getApplicationContext(), "Made it", 0).show(); 
finish(); 
} 
} 
+1

使用LogCat检查与您的崩溃相关的Java堆栈跟踪。 – CommonsWare

+1

尝试在'finish()后添加'return;';' – Vikram

回答

4

android start activity from service

Intent i= new Intent(getBaseContext(), screen.class); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplication().startActivity(i); 

你的错误似乎是screen活动中。有许多线程这可能有助于弄清楚,你得到该活动的错误:

这个错误是因为你还没有叫

Error in Android "SuperNotCalledException:Activity did not call through to super.OnCreate()"

android.app.SuperNotCalledException: Activity did not call through to super.onStop()

更新:super.onCreate(savedInstanceState);在您的screen活动的onCreate()。这应该是onCreate()中首先要调用的内容。做这样的事情:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //.... other stuff 
} 

希望这会有所帮助。

+0

已经尝试过了,没有工作,无论如何谢谢 –

+0

你可以发布logcat吗? –

+0

我会在问题 –