我已经检查了所有相关问题,但没有找到解决此问题的任何方法.所以这对我来说是一个绝对新的问题.
是)我有的
我有一个Android应用程序,它在其清单中注册了几个广播接收器.这就是我的清单看起来的样子.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.app.myapp">
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false" />
<application
android:name=".base.MyApp"
android:allowBackup="false"
android:icon="@drawable/ic_launcher"
android:label="@string/label_app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="label, allowBackup">
<receiver android:name=".mics.BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
<receiver android:name=".PhoneCallReceiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" …
Run Code Online (Sandbox Code Playgroud) android broadcastreceiver android-broadcast android-broadcastreceiver
故事
我在我的应用中使用Firebase实时数据库.我有一个像这样的模型.
class Item {
int mItemName;
// Simplified for brevity
}
Run Code Online (Sandbox Code Playgroud)
现在,它将该字段存储itemName
在我的实时数据库中.但我不想使用该命名约定.我希望命名模式是这样的item_name
.
我做了什么
我在这个字段上方使用@PropertyName("item_name"),
class Item {
@PropertyName("item_name")
int mItemName;
// Simplified for brevity
}
Run Code Online (Sandbox Code Playgroud)
问题
Firebase似乎完全忽略了注释.我无法更改序列化和反序列化的属性名称.
任何帮助将受到高度赞赏.
编辑
这是关注的完整模型类,
public class FileModel {
@PropertyName("file_id")
String mFileId;
@PropertyName("file_name")
String mOriginalFileName;
@PropertyName("file_path")
String mFilePath;
@PropertyName("file_type")
String mFileType;
@PropertyName("last_modified")
Long mFileLastModified;
@PropertyName("file_size")
String mFileSize;
@Exclude
private boolean mIsSelected;
/**
* Must have empty constructor for JSON deserialization by Firebase
*/
public FileModel() {
}
public FileModel(String fileId, …
Run Code Online (Sandbox Code Playgroud) 是)我有的
我有一个箭头图像(如左图).当用户点击它时,它应该用动画旋转180度,看起来应该是正确的.
我做了什么
private void rotate(float degree, final int toggleV) {
final RotateAnimation rotateAnim = new RotateAnimation(0.0f, degree,
RotateAnimation.RELATIVE_TO_SELF, 0.5f,
RotateAnimation.RELATIVE_TO_SELF, 0.5f);
rotateAnim.setDuration(500);
toggle.startAnimation(rotateAnim);
rotateAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
if (toggleV == 1)
toggle.setImageResource(R.drawable.toggle_up);
else
toggle.setImageResource(R.drawable.toggle_down);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
Run Code Online (Sandbox Code Playgroud)
问题
我看到动画工作正常,但设置图像时有一点闪烁.可能是因为动画结束和设置图像时的时差.
如何删除此闪烁问题?你有更好的方法吗?
在我的应用中,我使用的是Firebase数据库.现在,当我正在侦听特定位置的子节点的任何更改时,如果没有Internet连接,则不会触发回调.firebase电话被卡住了.
我用这个,
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
firebaseDatabase.setPersistenceEnabled(true);
Run Code Online (Sandbox Code Playgroud)
因此,启用了持久性.问题只出现在一个场景中.当Firebase的本地持久性没有数据且互联网连接也不可用时.
我用这个,
addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
Timber.d("Cancelled");
}
});
Run Code Online (Sandbox Code Playgroud)
我没有得到该特定场景的两个回调中的任何一个.
我应该怎么做才能解决这种情况?
我使用GoogleApiClient使用他们的Google帐户登录用户.基本上,我使用Firebase Auth与Google登录.
但我每天都会在某些设备上崩溃.当我在我自己的一些设备(OnePlus 3,Nexus 5X,Moto G等)上进行测试时,我从未看到过这种崩溃.
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toLowerCase(java.util.Locale)' on a null object reference
at com.google.android.gms.internal.zzamy.zzd(Unknown Source)
at com.google.android.gms.internal.zzamv.n(Unknown Source)
at com.google.android.gms.internal.zzamv.zza(Unknown Source)
at com.google.android.gms.internal.zzamv$2.run(Unknown Source)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)
这就是我正在做的实例化GoogleApiClient.我没有看到正常情况下的崩溃,但在某些设备中我看到了这一点.这是我在代码中所做的事情,
String mClientId = parcel.getProviderExtra().getString(CLIENT_ID_KEY);
GoogleSignInOptions googleSignInOptions;
googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(mClientId)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(App.getContext())
.addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions)
.build();
mGoogleApiClient.connect();
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我最好的选择是,App.getContext()
它为应用程序上下文提供实例化客户端.这可能是问题吗?
我可以使用活动上下文,但使用它会导致内存泄漏.这里有什么问题,如何解决?
对于在打开应用程序并尝试唱歌之后发生崩溃的用户,这会产生非常糟糕的体验.
android google-api-java-client google-api-client firebase firebase-authentication
是)我有的
我在我的应用中使用Firebase身份验证,用户可以使用电子邮件和密码进行注册.如果用户尚未验证其电子邮件,则会在验证其电子邮件之前禁用某些功能.
我还有一个按钮来显式触发验证邮件,它只是调用,sendEmailVerification()
.它工作正常,始终发送验证邮件.
问题
用户获取验证邮件,但当他/她验证并返回应用程序时,isEmailVerified()
始终为假.所以我的应用程序仍然不允许用户使用所有功能,尽管他/她已经验证了他们的电子邮件.
但如果他们注销并再次登录,则isEmailVerified()
立即返回true.但是注销用户并再次登录是不好的.
它是Firebase中的错误吗?或者我做错了什么?
是)我有的
我有一个SearchView,可以完美地完成它的工作.但当我触摸它时,它会出现并从无到有中消失.没有过渡动画播放,因此看起来不太好.
我想要的是
我想要一个简单的向左滑动和向右滑动动画在分别展开和折叠时在SearchView上播放.
我试过的
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
//Get the ID for the search bar LinearLayout
int searchBarId = searchView.getContext().getResources().getIdentifier("android:id/search_bar", null, null);
//Get the search bar Linearlayout
LinearLayout searchBar = (LinearLayout) searchView.findViewById(searchBarId);
//Give the Linearlayout a transition animation.
searchBar.setLayoutTransition(new LayoutTransition());
Run Code Online (Sandbox Code Playgroud)
但是searchBar总是为null,所以我无法在其上设置布局转换.
我可以为它找到解决方案吗?我的方法是否正确?
在引擎盖下
我在Android应用中使用Firebase身份验证,使用Google,Facebook和电子邮件/密码注册用户.到目前为止,除了单个场景之外,几乎所有内容都能正常工
情景
我需要禁用或删除 Firebase控制台中的用户帐户,以禁止我的应用的某些用户.
在这种情况下,当我禁用或删除该特定用户时,用户必须立即从应用程序注销,并且不能再使用它.
错误
我已经使用它AuthStateListener
来监听身份验证状态更改,并在他们的帐户被禁用或删除后自动注销用户.
FirebaseAuth.getInstance().addAuthStateListener(firebaseAuth -> {
if (firebaseAuth.getCurrentUser() == null) {
Intent intent = AuthFlowActivity.getCallingIntent(AuthFlowActivity.FORCE_LOGOUT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
activityExitAnimation(BaseAppActivity.this);
}
});
Run Code Online (Sandbox Code Playgroud)
但我从未见过AuthStateListener触发这些操作的任何事件.所以我无法立即注销用户,用户仍然可以继续使用该应用程序.
如果有人可以帮助解决这个问题,我将不胜感激.
我最近购买的所有Android应用都显示了新的订单ID格式.
OLD格式:
[merchant ID].[actual order ID]
Run Code Online (Sandbox Code Playgroud)
我们可以使用此格式来检查订单ID的前缀是否与商家ID匹配,并防止像Freedom这样的应用程序可能存在黑客攻击.
新格式:
GPA. 1234-5678-9123-45678
Run Code Online (Sandbox Code Playgroud)
我想知道这个数字代表什么,子块的重要性,是否包含在任何地方的商家ID?
我计划切换到Firebase作为我的Android应用程序的本地和在线数据库.根据文档,Firebase首先存储对本地数据库的更改,然后在网络可用时将其推送到在线数据库.
在我的应用程序中,我将在数据库中放置一些关于用户的非常敏感的数据.所以这是我的问题,
本地Firebase数据库的安全性如何?
一个好心的黑客用正确的工具来破解它有多难?
它只是一个简单的JSON文件,如在线数据库,任何具有root访问权限的人都可以打开吗?
谢谢.