最近一个朋友使用uniapp开发,想要一个android版的插件,大致是:android_监听截屏&不监听截屏_允许截屏$禁止截屏_javascript调用代码截屏(打一个广告,已经发布到uniapp插件市场了,插件)…,开发过程中需要在Module获取activity获取Window对象,当时走了一些弯路,如下注释处:
public class MyModule extends WXModule {
@JSMethod (uiThread = true)
public void printLog(String msg) {
//mWXSDKInstance.getContext()
//有Context了,没有activity咋办??
Toast.makeText(mWXSDKInstance.getContext(),msg,Toast.LENGTH_SHORT).show();
}
}
一直以为Context拿到了,获取Window对象时候就犯难了(鄙人对Android不是很熟,属于业余的,主要从事java后端服务器开发),Window需要activity.getWindow();这样获取,但是,但是怎么拿到activity呢?
没想到mWXSDKInstance.getContext()就是当前的activity对象,敲黑板,上weex部分关键源代码:
public class MainActivity extends AppCompatActivity implements IWXRenderListener {
//注意这个就是你使用的那个东东...
WXSDKInstance mWXSDKInstance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//看这里,是不是豁然开朗,Module里面的mWXSDKInstance.getContext()就是当前的Activity
//所有,童鞋们,强转一下即可:Activity activity = (Activity )mWXSDKInstance.getContext()
mWXSDKInstance = new WXSDKInstance(this);
mWXSDKInstance.registerRenderListener(this);
/**
* bundleUrl source http://dotwe.org/vue/38e202c16bdfefbdb88a8754f975454c
*/
String pageName = "WXSample";
String bundleUrl = "http://dotwe.org/raw/dist/38e202c16bdfefbdb88a8754f975454c.bundle.wx";
mWXSDKInstance.renderByUrl(pageName, bundleUrl, null, null,WXRenderStrategy.APPEND_ASYNC);
}
}
总结:看代码
public class MyModule extends WXModule {
//run ui thread
@JSMethod (uiThread = true)
public void printLog(String msg) {
//获取Window对象
Activity activity = (Activity )mWXSDKInstance.getContext();
Window youWindow = activity.getWindow();
//TODO some thing you need...
Toast.makeText(mWXSDKInstance.getContext(),msg,Toast.LENGTH_SHORT).show();
}
}