将项目添加到LiveData列表时,我需要获取Observer事件.但正如我所理解的那样,只有当我用新的列表替换旧列表时才会收到事件.例如,当我做下一个时:
list.value = mutableListOf(IssuePost(UserEntity(name, email, photoUrl), issueEntity))
Run Code Online (Sandbox Code Playgroud)
观察者得到事件.但是当我只是将item添加到value时,Observer是静默的.您能否就我如何实施我的需求提出建议?
我需要替换当前的屏幕并replace
在Navigator的API中找到方法。但是我没有找到任何例子。也许有人知道使用它很热。谢谢。
要按照指南在Google Play上使用预发布报告,需要构建一个自定义alpha apk,让"机器人"通过登录按钮传递到主应用屏幕:
如果您的应用程序直接打开具有所需凭据(特定于应用程序,社交媒体)的登录屏幕,则可能会得到有限的结果,因为测试期间测试设备无法跳过这些屏幕.
要对您的应用进行更完整的测试,您可以发布带有登录按钮的alpha或beta APK,该按钮允许测试设备只需单击即可继续测试您的应用.
例如,您可以发布带有"使用测试帐户登录"按钮的Alpha APK,该按钮会使用预加载的帐户信息加载您的应用.
问题:是否可以设置这样一个"虚假谷歌登录按钮",以便它嵌入真实测试帐户的帐户名/密码?
我在设备上的两个不同应用程序中有两个辅助功能服务.他们每个人都对其他应用程序有一些看法.我面临以下问题:当启用2个辅助功能服务时,只有一个绘制视图,另一个不会获得任何事件.
事件配置如下:
@Override
protected void onServiceConnected() {
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK;
info.notificationTimeout = TIMEOUT_IN_MS;
setServiceInfo(info);
super.onServiceConnected();
}
Run Code Online (Sandbox Code Playgroud)
我可以在前Lollipop Android版本上重现它,也可以在Android M上重现.在Android O和N上,所有服务都可以正常工作.
有人可以向我解释它是如何发生的,也许从Android N开始有一些改进吗?如果有办法让它们同时工作,你能不能给我一个实现呢?
我面临下一个问题:
StrictMode policy violation; ~duration=2235 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=65567 violation=2
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1278)
at libcore.io.BlockGuardOs.lseek(BlockGuardOs.java:162)
at java.io.RandomAccessFile.seek(RandomAccessFile.java:603)
at java.util.zip.Zip64.parseZip64EocdRecordLocator(Zip64.java:98)
at java.util.zip.ZipFile.readCentralDir(ZipFile.java:419)
at java.util.zip.ZipFile.<init>(ZipFile.java:175)
at java.util.zip.ZipFile.<init>(ZipFile.java:131)
at dalvik.system.DexPathList$Element.maybeInit(DexPathList.java:452)
at dalvik.system.DexPathList$Element.findResource(DexPathList.java:499)
at dalvik.system.DexPathList.findResource(DexPathList.java:360)
at dalvik.system.BaseDexClassLoader.findResource(BaseDexClassLoader.java:67)
at java.lang.ClassLoader.getResource(ClassLoader.java:403)
at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:442)
at ch.qos.logback.classic.util.ContextInitializer.getResource(Unknown Source)
at ch.qos.logback.classic.util.ContextInitializer.findConfigFileURLFromAssets(Unknown Source)
at ch.qos.logback.classic.util.ContextInitializer.autoConfig(Unknown Source)
at org.slf4j.impl.StaticLoggerBinder.init(Unknown Source)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(Unknown Source)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
at com.my.utils.x.c(LogUtils.java:164)
at com.my.utils.x.b(LogUtils.java:65)
at com.my.Application.onCreate(Application.java:148)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1018)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4970)
at android.app.ActivityThread.-wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1560)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5765)
at java.lang.reflect.Method.invoke(Native …
Run Code Online (Sandbox Code Playgroud) 我使用 Room 和 Flows 制作了一个简单的示例应用程序:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val build = Room.databaseBuilder(this, FinanceDatabase::class.java, "database.db")
.fallbackToDestructiveMigration()
.build()
GlobalScope.launch {
build.currencyDao().addCurrency(CurrencyLocalEntity(1))
val toList = build.currencyDao().getAllCurrencies().toList()
Log.d("test", "list - $toList")
}
}
}
@Entity(tableName = "currency")
data class CurrencyLocalEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "currencyId")
var id: Int
) {
constructor() : this(-1)
}
@Dao
interface CurrencyDao {
@Query("SELECT * FROM currency")
fun getAllCurrencies(): Flow<CurrencyLocalEntity>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun addCurrency(currency: CurrencyLocalEntity)
}
@Database(entities …
Run Code Online (Sandbox Code Playgroud) 我需要将FCM令牌保存到Firebase数据库中以发送通知。有更好的方法吗?现在我这样做:
FirebaseDatabase.getInstance().reference.child("users/${user.uid}/tokens").push().setValue(token)
Run Code Online (Sandbox Code Playgroud)
这样,每次按下令牌时,令牌都有新的唯一ID,并且可以具有相同的令牌。
你能给我个建议吗?或者,也许我可以使用Firebase函数来做到这一点,它将删除重复项。
android firebase firebase-realtime-database firebase-cloud-messaging
我需要获取发布有关未接来电的通知的应用程序的包名称。据我了解,它制作了设备的拨号器应用程序。我可以从 API 19 获取设备上拨号器应用程序的包名称吗?
我创建了一个仅显示一个图标、两个文本和两个按钮的应用程序。单击任何按钮时,相应的文本都会更新,因为它取决于我的函数中传递的值。但与文本一起,每次图标重新组合时,它甚至不依赖于任何值。
data class TestUIState(
val counterA: Int = 0,
val counterB: Int = 0,
)
@HiltViewModel
class TestViewModel @Inject constructor() : ViewModel() {
val uiFlow = MutableStateFlow(TestUIState())
val data: TestUIState
get() = uiFlow.value
fun increaseCounterA() {
uiFlow.value = data.copy(counterA = data.counterA + 1)
}
fun increaseCounterB() {
uiFlow.value = data.copy(counterB = data.counterB + 1)
}
}
@Composable
fun TestCompose(
uiValueState: State<TestUIState>,
increaseCounterA: () -> Unit,
increaseCounterB: () -> Unit,
) {
Column(modifier = Modifier.fillMaxSize()) {
Icon(
painter = painterResource(id = …
Run Code Online (Sandbox Code Playgroud) 尝试startActivityForResult(intent, requestCode);
使用final Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent 时,我得到java.lang.SecurityException .有趣的是这次崩溃只发生在华为的Android 5.1 - 5.1.1上我没有华为设备.你能告诉我它的建议吗?
堆栈跟踪
Fatal Exception: java.lang.SecurityException: Permission Denial: starting Intent { act=android.settings.USAGE_ACCESS_SETTINGS cmp=com.android.settings/.Settings$UsageAccessSettingsActivity } from ProcessRecord{11b5f1a1 19764:com.myproject.my/u0a167} (pid=19764, uid=10167) not exported from uid 1000
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1499)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2448)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1496)
at android.app.Activity.startActivityForResult(Activity.java:3794)
at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:77)
at android.app.Activity.startActivityForResult(Activity.java:3755)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
at com.myproject.my.utils.PermissionsHelper$2.onClick(PermissionsHelper.java:134)
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5298)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
Run Code Online (Sandbox Code Playgroud)