编辑:因为有些人还在检查这个帖子,我想提一下这是非常过时的,因为它是关于应用程序购买的v2,现在已经弃用了.请查看最新的(目前v3)文档,这非常简单
关于这个问题有很多线索,我认为我理解这个问题,但是,目前我无法通过实际购买进行测试,因为我目前没有有效的信用卡,Google接受的只有Maestro,不被接受.这就是我寻求帮助的原因(不是购买验证,而是验证我的思维过程是好的).
首先,问题来自新verifyPurchase方法.新方法检查签名,这应该没问题.但是,Google不会为测试ID提供任何签名,例如android.test.purchased.这导致下面的方法总是失败,并且在验证时总是返回false,即使假购买已经完成,并且我有一个确认对话框,购买确实是成功的.方法:
public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) {
//if(BuildConfig.DEBUG) return true;
if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) ||
TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
return false;
}
PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}
Run Code Online (Sandbox Code Playgroud)
问题来自TextUtils.isEmpty()检查,因为签名将为空,代码将返回false.我的临时测试解决方法是在代码中,注释掉了.如果我if(BuildConfig.DEBUG) return true;在测试方法的开头添加,一切正常,用户可以启动并运行高级功能,所以问题确实与签名有关.
另一个问题是,如果我购买android.test.purchased,我无法查询用户的库存,因此我不能确定,检查用户是否购买了高级功能的检查方法是有效的.
我的两个问题:
如果我if(BuildConfig.DEBUG) return true;从中删除该行verifyPurchase,并将android.test.purchasedid 替换为我提供的真实SKU的真实ID,我可以确定一切都能在我的情况下正常工作吗?我再说一遍,增加的调试功能一切正常.如果您需要查看更多代码,请告诉我们!
下面的方法检查用户是否购买了高级功能,如果他/她有,则设置相应的首选项,否则,如果有任何东西向南,它会保留原样.这种方法是否正确?我正在Application课堂上,每个应用程序启动时都这样做,以防止修修补补.
private void checkPremium()
{
//get the helper up and …Run Code Online (Sandbox Code Playgroud) 我有3个AutoCompleteTextViews,我想在它们上注册2个String []适配器.目前,我这样做:
atw_from.setAdapter(new ArrayAdapter(ctx, android.r.layout.simple_dropdown_item_1line, stages_adapter));
Run Code Online (Sandbox Code Playgroud)
假设我的用户想输入"Középmező",他开始输入"Közé",他将会选择Középmező,直到这个,它非常简单.但是如果用户懒得键入重音(并且很多都是懒惰的),那么他只会输入Kozepmezo,然后他就不会得到任何报价,因为我的String []中没有Kozepmezo.我想要的是,如果他输入"Koze",他应该被提供给Középmező,所以即使他没有使用口音,他也会一直提供带有重音的实际单词.
目前,我有一个非常愚蠢的解决方案,我有一个String [],其大小是原始[]的两倍,前半部分包含带重音的单词,第二个包含deaccented版本.所以现在,如果他打字Közé,他将被提供Középmező,如果他输入Koze,他将被提供Kozepmezo.它的工作原理是因为服务器可以处理这两个版本,但它看起来很傻,我想解决它.
据我所知,我应该制作一个完整的自定义适配器.这是最好的方法,还是SDK中包含任何解决方案?如果我应该制作自定义适配器,有人能指出我正确的方向,如何做到这一点?:)
编辑:添加我自己的答案,应该为每个人工作,为其他答案欢呼,这导致我向好的方向!
据我了解,android 小部件需要 RemoteViews,而不是 View,就像活动一样。
我的问题:有什么办法可以完全避免xml,用java代码构建整个布局?
替代问题:我可以以某种方式检索视图,就像我会使用的那样findViewById(int)吗?例如:LinearLayout linearLayout=(LinearLayout)findViewById(R.id.xxx);这样我就可以访问基本布局,并按照我想要的方式进行操作。
谢谢!
假设我有一个ImageButton btn.我有两个不同的Bitmap,bmp1和bmp2.默认情况下,btn显示bmp1如下:
btn.setImageBitmap(bmp1);
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式制作动画,交叉淡化,bmp1并bmp2在调用以下内容时:
btn.setImageBitmap(bmp2);
Run Code Online (Sandbox Code Playgroud)
所以问题是,是否有可能 - 如果是,如何 - 为ImageButtons上的位图更改设置动画?