我刚开始使用Flows. 我遇到的情况是,我需要在调用之前等待userLoginStatusChangedFlow收集readProfileFromFirestore()(这也会收集Flow)。第一个检查用户是否已登录 Firebase Auth,而第二个则从 Firestore 下载用户的个人资料信息。我的代码可以工作,但我不确定我是否按照预期的方式进行操作。
Flows问:这样“连锁”是标准做法吗?你会采取不同的做法吗?
init {
viewModelScope.launch {
repository.userLoginStatusChangedFlow.collect { userLoggedIn: Boolean? ->
if (userLoggedIn == true) {
launch {
readProfileFromFirestore()
}
} else {
navigateToLoginFragment()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
readProfileFromFirestore()上面调用的方法:
// Download profile from Firestore and update the repository's cached profile.
private suspend fun readProfileFromFirestore() {
repository.readProfileFromFirestoreFlow().collect { state ->
when (state) {
is State.Success -> {
val profile: Models.Profile? = state.data
if (profile != null …Run Code Online (Sandbox Code Playgroud) 为了测试我的 Android Q 应用程序,我安装了 Android Studio 3.5 (canary) 并更新了我的构建配置,如下所述:
https://developer.android.com/preview/setup-sdk
但是我如何处理支持库依赖项?下面的都是红色的,因为:
此支持库不应使用与 compileSdkVersion (29) 不同的版本 (28)
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:gridlayout-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
testImplementation 'junit:junit:4.12') {
transitive = true;
}
Run Code Online (Sandbox Code Playgroud)
在 Google 发布新的支持库之前,我是否会保持原样?我收到一个构建错误,但我不确定它是否与此有关。
当以 Android 11 为目标并使用 Android 11 设备(物理设备或模拟器)时,以下方法不再适用于发送短信。更改目标 SDK 版本或设备 SDK 版本即可使其正常工作。logcat什么也没说。知道为什么它不起作用吗?
private void sendTextMessage() {
Intent intent = new Intent(Intent.ACTION_SENDTO);
String phoneNumber = prefs.getString(KEY_USER_SELECTED_PHONE_NUMBER, getString(R.string.enter_phone_number_default_text));
intent.setData(Uri.parse("smsto:" + phoneNumber)); // This ensures only SMS apps respond
intent.putExtra("sms_body", fetchTextMessageString());
if (intent.resolveActivity(getPackageManager()) != null) {
try {
startActivity(intent);
} catch (ActivityNotFoundException anfe) {
Utilities.showLogError(LOG_TAG, anfe, "Couldn't find SMS activity");
showSnackbar(MainActivity.this, null, 4500, true, new SpannableString("No SMS app installed on your device"), false, "DISMISS", null);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我发现我可以通过添加此权限来解决此问题:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
Run Code Online (Sandbox Code Playgroud)
...但是我可以使用更具体的查询来发送短信吗?
更新到 Android Studio 3.0 后,每次尝试使用 vibrate() 时都会收到此警告:
方法调用 'vibrate' 可能会产生 'java.lang.NullPointerException'
这是我的代码:
package com.gavinsappcreations.vibratortest;
import android.content.Context;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(100);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经包含了权限:
<uses-permission android:name="android.permission.VIBRATE"/>
Run Code Online (Sandbox Code Playgroud)
此外,该代码适用于我的设备。