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

Попробуйте добавить 'return;' после 'finish();' – 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()

Update

Ошибка, потому что вы не вызвали : super.onCreate(savedInstanceState); в вашем screen деятельности onCreate(). Это должно быть первое, что нужно назвать в onCreate(). Сделайте примерно следующее:

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

Надеюсь, что это поможет.

+0

уже попробовал, что не работал, спасибо в любом случае –

+0

Можете ли вы разместить logcat? –

+0

Я отправлю его по вопросу –

Смежные вопросы