我目前正在构建一个插件来利用 Android 和 iOS 上的原生 API。
我已经写MyPlugin了实现MethodCallHandler. 在我的插件项目中,我有一个示例应用程序。这个示例应用程序有一个生成的类GeneratedPluginRegistrant.class,它调用静态方法registerWith。所有这些都用作MainActivity.
我有几个问题。
似乎MyPlugin必须匹配插件项目的名称。IE - 项目是flutter_tools,我的插件必须命名FlutterToolsPlugin,否则GeneratedPluginRegistrant会中断。是如何GeneratedPluginRegistrant产生的?
的目的是GeneratedPluginRegistrant什么?
我的插件注册后实际发生了什么?
如果我想使用MyPlugin,可以不用GeneratedPluginRegistrant吗?我想,以生命周期方法等回答onActivityResult,似乎这种封装使我不能直接在插件进行交互FlutterActivity。
我可以在本机端与我自己的其他本机插件交互而无需通过 Dart 来回切换吗?
我想在我的应用程序中实现导航组件中详细介绍的OnBackPressedCallback。该文档非常清楚地说明了如何在片段中添加此自定义行为,并且效果很好。阅读链接的文档后,它指出您应该避免onBackPressed在活动中覆盖。我当前的onBackPressed方法看起来像这样:
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
} else if (shouldOverrideBackPressed()) {
navigationController.popBackStack(R.id.main_fragment, false);
} else {
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
最后一行super.onBackPressed();是我不太清楚的。如何在实现时保留活动中后退按钮的默认行为OnBackPressedCallback?这是我当前的实现:
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
} else if (shouldOverrideBackPressed()) {
navigationController.popBackStack(R.id.main_fragment, false);
} else {
setEnabled(false);
MainActivity.this.onBackPressed();
}
}
});
Run Code Online (Sandbox Code Playgroud)
如果我不包含该setEnabled(false);行,则会收到堆栈溢出错误,这是有道理的。但肯定有一种更优雅的方式来提供默认行为吗?
我目前正在开发一个应用程序,其中我使用了一个经过大量修改的Split Action Bar.这是应用程序当前状态的链接:

您会注意到顶部有一个透明的操作栏,其中有一个自定义视图,底部有一个被黑客攻击的分割操作栏.底部视图实际上是一个单独的操作项,其中自定义视图充气并且showAlways = true.
目前我只支持SDK v15 +,我并不打算改变它,但是刚刚发布的Lollipop AppCompat库,我决定实现它,所以我可以在我的应用程序中获得一些非常棒的功能.
我已经将主题更改为Theme.AppCompat.Light,而我的MainActivity现在扩展了ActionBarActivity而不是Activity.
所有对getActionBar的引用现在都已切换到getSupportActionBar,只有这些更改,这就是我的活动现在的样子:

您会注意到我从设备监视器获得了一个UI转储,它将底部操作栏推入一个奇怪的空间并调用操作栏,并摆脱我的顶级自定义视图.
这是我设置操作栏的代码:
public void initializeActionBar(){
View customNav = LayoutInflater.from(this).inflate(R.layout.action_bar_top, null);
actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.transparent_fifty_percent));
final PopupWindow window = addPopupWindow();
actionBarOptions = (ImageView)customNav.findViewById(R.id.options);
actionBarOptions.setVisibility(View.GONE);
actionBarOptions.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.vertical_ellipsis, app.scaleByDensity(48)));
actionBarOptions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
window.showAsDropDown(actionBarOptions, 0, 0);
}
});
TextView title = (TextView) customNav.findViewById(R.id.screen_title);
Typeface font1 = Typeface.createFromAsset(getAssets(), "Merriweather-Italic.ttf");
title.setText("Parsley");
title.setTypeface(font1);
actionBar.setCustomView(customNav);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.test, menu);
LinearLayout …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试在我的Android应用程序中组合一个正常运行的KeyStore实现.我目前正在建立最低API为18,以便我可以充分利用KeyStore我的应用程序的私有.我试图生成n多个KeyPair对象,并将它们保存在KeyStore以后的检索中.我已经看过这个问题了,但它看起来有点过时(2012)并没有真正回答任何问题.老实说,我在Stack Overflow上发现的大多数问题似乎都非常过时,就像这里和这里一样.
所以我的预期流程如下:
KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");到目前为止,一切都非常直接,并且工作正常.接下来是毛茸茸的地方.
KeyStore.getInstance("AndroidKeyStore");X509Certificate通过X509V3CertificateGenerator.此证书是自签名的.对于证书,我将签名算法设置为"SHA1WithRSAEncryption".keyStore.setKeyEntry最后一步似乎有两种选择:
keyStore.setKeyEntry(String alias, byte[] key, Certificate[] chain);
要么
keyStore.setKeyEntry(String alias, Key key, char[] password, Certificate[] chain);
我从两个中的第二个开始,但收到了java.security.KeyStoreException: entries cannot be protected with passwords....好吧,这很奇怪,为什么会有一个方法可以保证抛出异常?我们来试试1号门.
此时,当我调用setKeyEntry并传递keyPair.getPrivate().getEncoded()作为第二个参数时,我java.security.KeyStoreException: Operation not supported because key encoding is unknown从系统接收.
所以我有点不知所措.像这样的加密对我来说相对较新,所以我希望有人可以对Android KeyStore系统这一令人困惑的情况有所了解.