2014-10-08 3 views
0

Я не слишком хорошо знаком с написанием плагинов для Android, однако я хотел бы реализовать функцию длинного нажатия кнопки поиска аппаратного обеспечения в приложении Кордовы.Добавление переопределения для onKeyLongPress в Android Phonegap плагин

Я могу успешно сделать это следующим образом:

public class MyClass extends CordovaActivity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     super.init(); 
     // Set by <content src="index.html" /> in config.xml 
     super.loadUrl(Config.getStartUrl()); 
     //super.loadUrl("file:///android_asset/www/index.html"); 
    } 
    @Override 
    public boolean onKeyLongPress(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_SEARCH) { 
      Context cntx = getApplicationContext(); 
      Toast.makeText(cntx, "Long Press", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     return super.onKeyLongPress(keyCode, event); 
    } 
} 

Но я ищу способ поставлять onKeyLongPress переопределение в плагине, а не путем непосредственного редактирования MyClass.java, как описано выше (выше было просто POC).

Как я понимаю, это должно быть переопределением на MyClass, а не CordovaActivity. Как я могу расширить MyClass через мой плагин, считая, что мое понимание верное?

Я знаю, что можно добавить прослушиватель событий, как это:

document.addEventListener("searchbutton", function (e) { 
    //Do stuff here 
}, false); 

Однако мое требование является длительным нажатием.

Я попытался следующее:

Создание моего плагина и пытается расширить класс моего приложения:

public class MyPlugin extends MyClass 
{  
    @Override 
    public boolean onKeyLongPress(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_SEARCH) { 
      Context cntx = getApplicationContext(); 
      Toast.makeText(cntx, "Long Press", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     return super.onKeyLongPress(keyCode, event); 
    } 
} 

Создание моего плагина и пытается расширить CordovaActivity:

public class MyPlugin extends CordovaActivity 
{  
    @Override 
    public boolean onKeyLongPress(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_SEARCH) { 
      Context cntx = getApplicationContext(); 
      Toast.makeText(cntx, "Long Press", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     return super.onKeyLongPress(keyCode, event); 
    } 
} 

Любые указатели будут благодарны.

ответ

0

Я думал, что отправлю свой ответ здесь, если у кого-нибудь будет такая же проблема.

мне удалось добиться того, что мне было нужно, выполнив следующие действия:

private void bindKeyEvents(){ 
    this.webView.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_SEARCH) { 
       if (event.getAction() == KeyEvent.ACTION_UP){ 
        Log.d("testApp", "Release"); 
        return true; 
       } 
       if (event.getAction() == KeyEvent.ACTION_DOWN && event.isLongPress()){ 
        Log.d("testApp", "Long Press"); 
        return true; 
       } 
       if (event.getAction() == KeyEvent.ACTION_DOWN){ 
        event.startTracking(); 
        Log.d("testApp", "Press"); 
        return true; 
       } 
      } 
      return true; 
     } 
    }); 
} 

И называется методом bindKeyEvents из моего плагина.

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