나는 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
오류가 발생합니까? 그렇다면 logcat도 게시하십시오. – RobinHood
@RobinHood 오류는 없지만 실행 중이어도 설치에 실패했다는 콘솔 출력이 게시되었습니다. – jskrwyk
잘 모르겠지만 문제가 아닌 것 같습니다. [에뮬레이터 창이 보이지 않고 축소되었습니다] (http://www.coderanch.com/t/546671/Android/Mobile/emulator-window-was-out-view) – RobinHood