嵌入式小程序——Android使用指南
嵌入式小程序是百度智能小程序的一种view运行形态,宿主开发者可以在宿主app合适的位置中内嵌该小程序视图,让小程序更好的和宿主app融合在一起。本文介绍了在接入了小程序SDK后,嵌入式小程序的实现流程。
前置条件
嵌入式小程序使用
下面介绍Android客户端嵌入视图小程序的整体实现流程:
第一步,创建嵌入式小程序承载视图;第二步,同步宿主Activity生命周期到嵌入式小程序视图;第三步,加载嵌入式小程序;
1. 创建嵌入式小程序承载视图
小程序SDK为宿主提供了SwanAppEmbedView,其可以通过new对象的方式或者在xml文件布局的方式进行创建。
- new SwanAppEmbedView(activity)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class EmbedActivity extends Activity implements ActivityResultDispatcherHolder { private SwanAppEmbedView mSwanAppEmbedView;
private void initEmbedView() { mSwanAppEmbedView = new SwanAppEmbedView(MainActivity.this); mSwanAppEmbedView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); mRootView.addView(mSwanAppEmbedView); }
······ }
|
- xml文件布局
布局:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <com.baidu.swan.apps.embed.view.SwanAppEmbedView android:id="@+id/embedView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 使用: ```java public class EmbedActivity extends Activity implements ActivityResultDispatcherHolder { /** 小程序嵌入视图 */ private SwanAppEmbedView mSwanAppEmbedView; /** * 初始化嵌入式小程序视图 */ private void initEmbedView() { mSwanAppEmbedView = findViewById(R.id.embedView); }
······ }
|
2. 同步宿主Activity生命周期到嵌入式小程序视图
为了保证小程序的正常运行,该嵌入式小程序视图的一些生命周期方法需要在宿主的activity进行调用,以宿主Activity为EmbedActivity为例,(注:需要实现ActivityResultDispatcherHolder
接口),如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| public class EmbedActivity extends Activity implements ActivityResultDispatcherHolder { private SwanAppEmbedView mSwanAppEmbedView;
private void initEmbedView() { mSwanAppEmbedView = new SwanAppEmbedView(this); } @Override protected void onStart() { super.onStart(); if(mSwanAppEmbedView !=null){ mSwanAppEmbedView.onStart(); } } @Override protected void onStop() { super.onStop(); if(mSwanAppEmbedView !=null){ mSwanAppEmbedView.onStop(); } } @Override protected void onResume() { super.onResume(); if(mSwanAppEmbedView !=null){ mSwanAppEmbedView.onResume(); } } @Override protected void onPause() { super.onPause(); if(mSwanAppEmbedView !=null){ mSwanAppEmbedView.onPause(); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (mSwanAppEmbedView !=null && mSwanAppEmbedView.onKeyDown(keyCode, event)) { return true; } return super.onKeyDown(keyCode, event); } @Override public void onBackPressed() { if (mSwanAppEmbedView !=null && mSwanAppEmbedView.onBackPressed()) { return; } super.onBackPressed(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (mSwanAppEmbedView !=null && mSwanAppEmbedView.onActivityResult(requestCode, resultCode, data)) { return; } super.onActivityResult(requestCode, resultCode, data); } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); if(mSwanAppEmbedView !=null){ mSwanAppEmbedView.onConfigurationChanged(newConfig); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if(mSwanAppEmbedView !=null){ mSwanAppEmbedView.onRequestPermissionsResult(requestCode, permissions, grantResults); } } @Override public void onTrimMemory(int level) { super.onTrimMemory(level); if(mSwanAppEmbedView !=null){ mSwanAppEmbedView.onTrimMemory(level); } } @Override protected void onDestroy() { super.onDestroy(); if(mSwanAppEmbedView !=null){ mSwanAppEmbedView.onDestroy(); } } @Nullable @Override public ActivityResultDispatcher getResultDispatcher() { if(mSwanAppEmbedView !=null){ return mSwanAppEmbedView.getResultDispatcher(); } return null; } }
|
3. 加载嵌入式小程序
通过调用嵌入式小程序视图的loaApp(scheme, activity)方法,加载指定小程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class EmbedActivity extends Activity implements ActivityResultDispatcherHolder { private SwanAppEmbedView mSwanAppEmbedView;
private void loadEmbedApp(String launchScheme) { mSwanAppEmbedView.loadApp(launchScheme, this); }
······ }
|
注意事项
- SwanAppEmbedView同一进程只支持展示一个,如果存在多个SwanAppEmbedView实例,最新loadApp的实例会展示对应内容,其他SwanAppEmbedView里面的页面内容会被自动销毁。
- 8.0的手机存在系统bug,不支持透明主题的activity进行setRequestedOrientation操作,否则崩溃,如果宿主activity采用了透明主题,需适配8.0手机。