android - Show dialog in hooked method by xposed running in thread -
i try show alertdialog within hooked method xposed. problem method running in threads, , thread running in thread, etc...
for example : activity -> thread -> thread -> ... -> function
is there way show alertdialog ? have context, since hooked function not in main thread, useless.
edit (some code) :
public class xposed implements ixposedhookloadpackage { private context ctx; private queue<string> queue = new linkedlist<>();  public void handleloadpackage(final loadpackageparam lpparam) throws throwable {     if (!lpparam.packagename.equals("xxx.xxx.xxx")) {         return;     }      // here context static class extending application     findandhookmethod("xxx.xxx.xxx", lpparam.classloader, "attachbasecontext", context.class, new xc_methodhook() {         @override         protected void afterhookedmethod(methodhookparam param) throws throwable {             xposedbridge.log("context modified");             ctx = (context) param.args[0];         }     });      findandhookmethod("com.xxx.xxx.xxx", lpparam.classloader, "e", "com.xxx.xxx.xxx", string.class, new xc_methodhook() {         @override         protected void afterhookedmethod(final methodhookparam param) throws throwable {             if (!(param.args[1]).equals("xxxxxxxxxxxxxx")) {                 return ;             }              xposedbridge.log("new element detected detected");             object param = param.args[0];             object info = callmethod(param, "q");              // here, want show alertdialog             dialoginterface.onclicklistener dialogclicklistener = new dialoginterface.onclicklistener() {                 @override                 public void onclick(dialoginterface dialog, int which) {                     if (which == dialoginterface.button_positive) {                      }                 }             };              // classic error can't modify ui             // in thread has not called looper.prepare()             alertdialog.builder builder = new alertdialog.builder(ctx);             builder.setmessage("are sure ?")                     .setpositivebutton("yes", dialogclicklistener)                     .setnegativebutton("no", dialogclicklistener)                     .show();         }     }); } thanks
you can keep reference of current activity (android.app.instrumentation.newactivity). goes this:
class<?> instrumentation = xposedhelpers.findclass(                 "android.app.instrumentation", lpparam.classloader);  method method = instrumentation.getmethod("newactivity",                  classloader.class, string.class, intent.class);  xposedbridge.hookmethod(method, ihook); in case ihook hook of yours stores current activity statically can invoke runonuithread wherever are:
public class activityhook extends xc_methodhook{      /* assure latest read of write */     private static volatile activity _currentactivity = null;      public static activity getcurrentactivity() {         return _currentactivity;     }      @override     protected object afterhookedmethod(methodhookparam param)             throws throwable {         _currentactivity = (activity) param.getresult();     } } then able anywhere:
activityhook.getcurrentactivity().runonuithread(...); good luck!
Comments
Post a Comment