使用Android Facebook SDK 3.5,我有持续的登录问题:我收到CLOSED_LOGIN_FAILED了FacebookOperationCanceledException.我知道CLOSED_LOGIN_FAILEDSO上有大约一百万个问题,但这个问题有所不同.请不要回答"你的关键哈希值好吗?它是不是沙盒?应用程序ID是否正常?",因为它们是.:-)我告诉你为什么我知道他们是:
如果我禁用SSO,我可以使用更复杂的非SSO方法登录.从那一刻起,即使再次启用SSO,它也会开始工作,之后就没有CLOSED_LOGIN_FAILED答案了.相同的用户,相同的键,相同的应用程序,相同的ID,一切都是一样的.非SSO登录只需要一次,然后一切恢复正常.不是一个孤立的案例,我可以用几个不同的帐户一致地重现它.
FacebookOperationCanceledException尽管用户授权访问,但仍会收到.要求适当的权限(实际上,单个publish_stream,仅此而已),授权对话框没问题,我按OK,而不是取消,我仍然得到该异常.
代码直接来自教程.一些相关部分供参考:
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
shareButton.setEnabled(true);
if (pendingPublishReauthorization && state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
pendingPublishReauthorization = false;
publishStory();
}
}
else if (state.isClosed())
shareButton.setEnabled(false);
}
Run Code Online (Sandbox Code Playgroud)
...
final LoginButton authButton = (LoginButton) findViewById(R.id.authButton);
authButton.setPublishPermissions(PERMISSIONS);
Run Code Online (Sandbox Code Playgroud)
...
uiHelper = new UiLifecycleHelper(this, new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception); …Run Code Online (Sandbox Code Playgroud) 我有一个带有常见谷歌广告和应用内支付功能的应用程序。它已被 Play 商店接受。现在我想让它同时支持GMS和HMS(根据适当服务的可用性,应用程序可以决定使用哪个平台)。该应用程序内置了华为功能,在我自己的设备上测试时运行良好。
然而,一旦华为的库与该应用程序捆绑在一起,Play商店控制台就会拒绝它。没有错误消息,只有一个红色感叹号。情况毫无疑问,我开始将与华为相关的部件一件一件地移除,当最后一个移除时,捆绑包又被自动接受了。
是的,当然,我可能犯了一些我不知道的错误,但情况相当可疑。如果有什么区别的话,我会使用 Flutter,并尝试像现在一样上传应用程序包,而不是 APK。似乎成功或失败的 HMS 库com.huawei.hms:hwid:4.0.0.300来自 Maven 存储库https://developer.huawei.com/repo/。
那么,我到底是看到了东西还是没有看到东西呢?
好的,任务继续。
这是最近的新闻:https ://support.google.com/googleplay/android-developer/answer/9934569
目前正在使用替代计费系统的任何现有应用程序都需要将其删除才能符合此更新的要求。对于这些应用程序,我们提供延长的宽限期,直至 2021 年 9 月 30 日,以便进行任何必要的更改。2021 年 1 月 20 日之后提交的新应用程序需要符合规定。
无论政策如何规定,Play 管理中心似乎已经强制执行了。正如我通过研究应用程序包发现的那样,风味方法还不够。即使使用其他风格,仍然会保留一些 Flutter 引用的包。也许只是引用的名称,而不是摇树之后的实际代码,但这已经足以拒绝。
因此,归根结底,如果我们真的想编写跨生态系统、单一来源的 Flutter 应用程序,我真的认为这个问题需要解决,并为我们自己、开发人员找到一些明确的指导方针。对于我来说,我当然想做。
当使用Toolbar带有appcompat支持库的new时,在我看来,除非您设置有效的选项菜单,否则Home按钮不会像以前那样工作.一个简单的沼泽标准活动:
public class MyActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.some_page);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar bar = getSupportActionBar();
bar.setHomeButtonEnabled(true);
bar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.some_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed() or finish() or whatever();
break;
}
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
如果有一个菜单设置onCreateOptionsMenu(),onOptionsItemSelected()将被调用所有权利,android.R.id.home一切都很好.但是,如果根本没有onCreateOptionsMenu()(或者它是空的,无论是返回true还是调用该super函数),onOptionsItemSelected()都不会被调用,因此没有机会捕获Home按钮上的点击.我甚至试图通过一个空菜单,onCreateOptionsMenu() …
我有一个带有 iframe 的 WebView。iframe 的内容会重定向到另一个不允许嵌入 iframe 的 URL。实际上,这不是问题,我只是想在这种情况下启动外部浏览器活动。问题是我找不到拦截重定向的方法。shouldOverrideUrlLoading()、onPageStarted() 或 onLoadResource() 都不会被调用进行重定向,因此我没有机会启动该活动。
添加enterAlways到Cheesesquare演示的滚动标志:
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlways">
Run Code Online (Sandbox Code Playgroud)
导致错误的布局:
在向下滚动期间,标题正确进入,但它不会停在正确的位置.滚动进一步取代零件:背景图像显示在错误的位置,工具栏因背景颜色的变化而变得不可见.(我还在这里添加了colorPrimary工具栏的背景,使其更加明显,但问题当然不依赖于颜色).这些库是截至今天的最新版本,23.1.0.
是否有任何解决方法或我们必须等待它在库中修复?现在,它似乎是任何需要此功能的应用程序的showstopper.
enterAlwaysCollapsed 虽然有效,但它提供了不同的功能,它不是一种解决方法.
android android-support-library material-design android-design-library android-collapsingtoolbarlayout
我用IProgressDialog按照正常方式使用界面,一切正常,但进度对话框仅在几秒钟后出现,当它确定操作确实很长时。尽管这没有任何记录,但这似乎是有意的行为,并且在许多情况下还不错。但是,在这个特定的应用程序中,我需要立即显示它。
我在整个网络上找到了一个参考文献来承认这一点并提出解决方法。然而,也许是因为这九年里出现了相当多的新 Windows 版本,今天它似乎不起作用:
IProgressDialog dialog;
dialog.StartProgressDialog(owner, null, flags, IntPtr.Zero);
...
IntPtr DialogHWnd;
((IOleWindow)dialog).GetWindow(out DialogHWnd);
SendMessage(DialogHWnd, WM_TIMER, new IntPtr(1), IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)
窗口句柄没问题,我检查了一下,没有错误,只是行为没有变化。该对话框仅在几秒钟后出现。
有人有关于在 C# 中重新创建相同对话框和功能的建议吗?当然,并非不可能,但除了用户非常熟悉之外,库存对话框还具有动画和取消行为等不错的功能。
在Java中这不是问题,但是在Kotlin中,我们没有静态的。我们有用于相同目的的伴随对象,但是,作为额外的对象,它们在JNI调用中得到了错误的名称(Java_package_Type00024Companion_function),这与JNI期望的不匹配。从主类调用它显然会导致的JNI错误GetStaticMethodID。
在我看来,DrawerLayout实现中缺少一件事:在抽屉打开之前触发的事件.
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerClosed(View view) {
//...
}
public void onBeforeDrawerOpened(View drawerView) {
//...
}
public void onDrawerOpened(View drawerView) {
//...
}
};
Run Code Online (Sandbox Code Playgroud)
需要它的原因是设置抽屉项目的状态,如选择,启用和类似的菜单项.将它放入onDrawerOpened()回调有点可行,但在打开后更改菜单外观看起来并不正确.
我的第一个想法是扩展ActionBarDrawerToggle并提供新的活动.我要重新发明轮子:-)还是已经有人这样做了?
我在 a 中有以下内容ControlTemplate.Resources:
<ColorAnimation
Storyboard.TargetName="border"
Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"
To="Orange"
Duration="0:0:0.2" />
Run Code Online (Sandbox Code Playgroud)
如果我想更改为橙色的原始背景是纯色,它就可以正常工作。但是当原始背景是LinearGradientBrush. 在第二种情况下,动画试图徒劳地改变属性,什么也没有发生。
如何指定替换背景的动画,无论之前是什么类型?
让我开始另一个问题,因为虽然我看到了很多类似的问题,但没有人真正谈论过这方面......我有一个 C++ DLL(没有源代码,但 .lib 和 .h),我编写了必要的托管包装器。这没有问题,问题是关于原始 C++ 代码中定义的结构和枚举,它们很多,都需要暴露给 C# 代码。教程和示例通常使用简单的数据类型,如浮点数和字符串,而不是复杂数据结构的现实世界场景。
我的托管 C++/CLI 包装器使用来自 DLL 的 .h 头文件的非托管结构。我包装的类成员函数一直在使用它们。因此,我需要在我的 C# 代码中使用相同的结构,传递它们并从 C++ 代码接收。很明显,我无法避免在 C# 中重新定义所有这些,但即便如此,使用它们也是有问题的。让我们举一个例子:一个由非托管代码中的函数使用的简单结构:
typedef struct INFO {
...
} INFO;
int GetInfo(INFO& out_Info);
Run Code Online (Sandbox Code Playgroud)
我在 C++/CLI 包装器代码中声明了相同的结构:
public ref struct INFO_WRAP {
...
};
int GetInfo(INFO_WRAP out_Info);
Run Code Online (Sandbox Code Playgroud)
包装器代码中的实现尝试将此新结构转换为原始结构,以使用旧的非托管代码:
int Namespace::Wrapper::GetInfo(INFO_WRAP out_Info) {
pin_ptr<INFO> pin_out_Info = out_Info;
return self->GetInfo(*(::INFO*)pin_out_Info);
}
Run Code Online (Sandbox Code Playgroud)
但这不会编译(无法在结构之间转换并且找不到合适的转换)。
是否有一种解决方案不涉及创建新的数据结构和手动来回复制所有结构成员?不仅是因为额外的工作和时间,而且确实有很多结构。