2012-05-03 2 views
1

나는 API 버전 2.3.3 최소 설계된 다음 코드를 작성하고이를 위해 설계된 에뮬레이터에서 잘 작동합니다. API 4.0에서 동일한 코드를 테스트하려고 시도했지만 앱을 제어하기 위해 구현 한 onFling 제스처가 작동하지 않습니다. 그들은 심지어 불려지지는 않습니다.Android 코드 작동 2.3에서 아니지만 4.0

다음은 코드입니다.

package com.mystraldesign.memorable; 

import java.io.IOException; 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.text.ClipboardManager; 
import android.view.GestureDetector; 
import android.view.GestureDetector.OnDoubleTapListener; 
import android.view.MotionEvent; 
import android.view.Window; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.mystraldesign.memorable.PassGen; 

public class MemorableActivity extends Activity implements android.view.GestureDetector.OnGestureListener,OnDoubleTapListener 
{ 
    //Define text views 
    private TextView textView1; 
    private TextView textView2; 
    private TextView textView3; 
    private TextView textView4; 

    //Previous password holder 
    private String prevPass; 

    //Gesture Detectors 
    private GestureDetector gTap; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     gTap = new GestureDetector(this,(android.view.GestureDetector.OnGestureListener) this); 

     //Remove title bar 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main); 




     //Define textView 
     textView1 = (TextView) findViewById(R.id.textView1); 
     textView2 = (TextView) findViewById(R.id.textView2); 
     textView3 = (TextView) findViewById(R.id.textView3); 
     textView4 = (TextView) findViewById(R.id.textView4); 

     //Load font file 
     Typeface type = Typeface.createFromAsset(getAssets(),"fonts/optima.ttf"); 

     //Set various textViews to font 
     textView1.setTypeface(type); 
     textView2.setTypeface(type); 
     textView3.setTypeface(type); 
     textView4.setTypeface(type); 

     prevPass = "Memorable"; 

    } 



    //Password call 
    public void newPass() 
    { 
     //Store Return 
     String retn = ""; 
     PassGen passWord = new PassGen(); 


     //Generate password 
     try 
     { 
      retn = passWord.passwordGen(this); 
     } 
     catch (IOException e) 
     { 

      //Message about Error 
      Context context = getApplicationContext(); 
      CharSequence text = "Ooops Something Went Wrong!"; 
      int duration = Toast.LENGTH_SHORT; 

      //Display message 
      Toast toast = Toast.makeText(context, text, duration); 
      toast.show(); 

      textView1.setText("Memorable"); 


      e.printStackTrace(); 
     } 

     //Update prevPass 
     prevPass = textView1.getText().toString(); 

     textView1.setText(retn); 
    } 









    /*--------------------------------------*/ 
    /*Additional gesture code below. */ 
    /* */ 
    /*J. Krawczyk 3/5/12*/ 
    /*--------------------------------------*/ 



    public boolean onTouchEvent(MotionEvent me){ 
     this.gTap.onTouchEvent(me); 
     return super.onTouchEvent(me); 
     } 



    public boolean onDown(MotionEvent e) { 

     return false; 
    } 

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) 
    { 

    String test = textView4.getText().toString(); 
    if ((velocityX == 0) && (velocityY > 0)) 
    { 

     //Call new password generation or generate random if set 
     if(test.equals("Memorable")) 
     { 
      newPass(); 
     } 
     else if(test.equals("Random")) 
     { 
      //create new password method 
      PassGen pass = new PassGen(); 

      //Set password 
      textView1.setText(pass.randomPassword()); 
     } 
    } 
    else if((velocityX == 0) && (velocityY < 0)) 
    { 
     textView1.setText(prevPass); 
    } 
    else if((velocityY == 0) && (velocityX > 0)) 
    { 

     if(test.equals("Memorable")) 
     { 
      textView4.setText("Random"); 
     } 
     else if(test.equals("Random")) 
     { 
      textView4.setText("Memorable"); 
     } 
    } 


    return false; 
    } 


    public void onLongPress(MotionEvent e) 
    { 

    } 


    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
     float distanceY) { 

    return false; 
    } 


    public void onShowPress(MotionEvent e) { 

    } 

    public boolean onSingleTapUp(MotionEvent e) { 

    return false; 
    } 


    //Method to copy password - Depreciated 
    public boolean onDoubleTap(MotionEvent e) { 

    return false; 
    } 

    //Method to copy password 
    public boolean onDoubleTapEvent(MotionEvent e) { 

     //clipboard shite 
     ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
     clipboard.setText(textView1.getText()); 

     //Message about coping 
     Context context = getApplicationContext(); 
     CharSequence text = "Password has been copied to clipboard."; 
     int duration = Toast.LENGTH_SHORT; 

     //Display message 
     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 

     return false; 
    } 



    public boolean onSingleTapConfirmed(MotionEvent e) { 

    return false; 
    } 





} 

콘솔은 설치가 실패했다는 메시지를 계속 표시하지만 에뮬레이터에 나타나고 실행됩니다. 실제 4.0 장치에서 테스트 할 때도 마찬가지입니다.

2012-05-03 05:57:06 - Emulator] 2012-05-03 05:57:06.471 emulator-arm[5445:1107] Warning once: This application, or a library it uses, is using NSQuickDrawView, which has been deprecated. Apps should cease use of QuickDraw and move to Quartz. 
[2012-05-03 05:57:06 - Emulator] emulator: emulator window was out of view and was recentered 
[2012-05-03 05:57:06 - Emulator] 
[2012-05-03 05:57:06 - Memorable] New emulator found: emulator-5554 
[2012-05-03 05:57:06 - Memorable] Waiting for HOME ('android.process.acore') to be launched... 
[2012-05-03 05:59:24 - Memorable] HOME is up on device 'emulator-5554' 
[2012-05-03 05:59:24 - Memorable] Uploading Memorable.apk onto device 'emulator-5554' 
[2012-05-03 05:59:26 - Memorable] Installing Memorable.apk... 
[2012-05-03 06:01:34 - Memorable] Failed to install Memorable.apk on device 'emulator-5554! 
[2012-05-03 06:01:34 - Memorable] (null) 
[2012-05-03 06:01:34 - Memorable] Failed to install Memorable.apk on device 'emulator-5554': EOF 
[2012-05-03 06:01:34 - Memorable] com.android.ddmlib.InstallException: EOF 
[2012-05-03 06:01:34 - Memorable] Launch canceled! 

편집 : 그것은 지금 실행에 설치

모든 AVD의 (2.3.3 - 4.0)하지만 제스처는 여전히 2.3.3

+0

오류가 발생합니까? 그렇다면 logcat도 게시하십시오. – RobinHood

+0

@RobinHood 오류는 없지만 실행 중이어도 설치에 실패했다는 콘솔 출력이 게시되었습니다. – jskrwyk

+0

잘 모르겠지만 문제가 아닌 것 같습니다. [에뮬레이터 창이 보이지 않고 축소되었습니다] (http://www.coderanch.com/t/546671/Android/Mobile/emulator-window-was-out-view) – RobinHood

답변

0

제스처의 오류로 인식되지 않는 것은 나 때문이었습니다. 속도를 표현하여 움직임을 결정하지만 안드로이드 4.0에서 더 세밀하게 제어되므로 결코 velocityX = 0 조건을 두드리지 못했습니다.

1

작업 나는

당신을 위해 몇 가지 제안이

1) 먼저 avd를 열고 완전히로드 될 때까지 기다렸다가 apk를 실행하십시오.

2) setContentView(tv);this.setContentView(tv);에 의해

3) 가까운/당신이 그것에 당신과 함께 테스트 장치를 가지고 있다면 다른 세 AVD

4) 삭제 ..


링크 변경 덧붙여서 thisthis

+0

@Frankenstien은이 모든 것을 다름없이 시도했습니다. Android 4.0 AVD에 여전히 설치되지 않음 – jskrwyk

관련 문제