最近又接触一个混合开发框架 uni-app,之前有用过APICloud ,cordova,flutter等混合开发,并做提供相应的插件开发,所以 uni-app也避免不了 插件开发和混合交互;这里就说一下开启原生Activity的方法
一、Js开启原生Activity
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<input type="button" value="js start native Activity" onclick="jsCallNativeActivity()"/>
</body>
<script type="text/javascript">
function jsCallNativeActivity(){
//获取宿主上下文
var main = plus.android.runtimeMainActivity();
//通过反射获取Android的Intent对象
var Intent = plus.android.importClass("android.content.Intent");
//通过宿主上下文创建 intent
var intent = new Intent(main.getIntent());
//设置要开启的Activity包类路径 com.HBuilder.integrate.MainActivity换掉你自己的界面
intent.setClassName(main, "com.HBuilder.integrate.MainActivity");
//开启新的任务栈 (跨进程)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//开启新的界面
main.startActivity(intent);
}
</script>
</html>
二、uni-app Plugin开启原生Activity
private void goNewActivity() {
Intent intent = new Intent();
Log.d("PluginTestFunction", "PluginTestFunction: " + intent);
//com.HBuilder.integrate换成你的包名,com.HBuilder.integrate.MainActivity换成你要开启的Activity的全路径
intent.setClassName("com.HBuilder.integrate", "com.HBuilder.integrate.MainActivity");
Context mContext = getDPluginContext();
// Activity mDPluginActivity = getDPluginActivity(); 这个值为null
Log.d("PluginTestFunction", "mDPluginActivity: " + mContext);
/**
* public Context getDPluginContext() {
return this.mDPluginContext == null ? this.mApplicationContext : this.mDPluginContext;
}
用于这里返回的是mApplicationContext ,所以要开启新的任务栈Intent.FLAG_ACTIVITY_NEW_TASK
*/
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
为啥要写个小笔记呢,完全是为了服务那些非原生开发者,要是Android开发者,这些都是基础