我的推送服务捕获了一个奇怪的推送消息:
Bundle[{CMD=RST_FULL, from=google.com/iid, android.support.content.wakelockid=1}]
Run Code Online (Sandbox Code Playgroud)
刚刚开始发生,我无法确定哪个代码更改应该归咎于此.有没有人见过这个消息,也许知道它来自哪里以及为什么?
我的应用允许用户从其他应用导入他们的照片和视频.现在谷歌用Google照片取代了Google+照片,但有些事情让我感到震惊.其中一件事是在应用重启后重新使用导入的文件.我感觉他们已经收紧了Google照片使用图片URI返回意图时发出的权限,因此在我的应用程序被杀后,它不再拥有访问上传文件的权限.我正在接受安检:
java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.contentprovider.MediaContentProvider from ProcessRecord{2c17ab9e 2124:com.myapp.myapp/u0a436} (pid=2124, uid=10436) that is not exported from uid 10427
Run Code Online (Sandbox Code Playgroud)
编辑:
我也在重复使用提供的文件时遇到同样的问题 com.google.android.apps.docs.sync.filemanager.FileProvider
有什么建议/解决方法吗?我知道我可以在失去许可之前阅读该文件,所以理论上我可以复制它,但我不能说我非常喜欢这个...
我看到以下异常:
04-06 13:35:58.498 4219 4219 E AndroidRuntime: android.view.InflateException: Binary XML file line #17: Failed to resolve attribute at index 6: TypedValue{t=0x3/d=0x46 "res/color/abc_secondary_text_material_dark.xml" a=2 r=0x7f0e00e5}
04-06 13:35:58.498 4219 4219 E AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
04-06 13:35:58.498 4219 4219 E AndroidRuntime: at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60)
04-06 13:35:58.498 4219 4219 E AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
04-06 13:35:58.498 4219 4219 E AndroidRuntime: at android.support.v7.internal.view.menu.MenuPopupHelper$MenuAdapter.getView(MenuPopupHelper.java:374)
04-06 13:35:58.498 4219 4219 E AndroidRuntime: at android.support.v7.internal.view.menu.MenuPopupHelper.measureContentWidth(MenuPopupHelper.java:223)
04-06 13:35:58.498 4219 4219 E AndroidRuntime: at android.support.v7.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:157)
04-06 13:35:58.498 4219 4219 E AndroidRuntime: at android.support.v7.widget.ActionMenuPresenter$OpenOverflowRunnable.run(ActionMenuPresenter.java:781) …Run Code Online (Sandbox Code Playgroud) 我正在尝试重构现有的应用程序以使用MVP架构.其中一项活动有ViewPager三个片段.每个片段都与演示者链接.确切地说 - 每个演示者在创建时都会被赋予一个View工作,即a Fragment.现在,我正在这个ViewPager适配器中创建这些演示者- 特别是在getItem(int position)方法中.
Fragment fragment = FirstFragment.newInstance();
FirstPresenter presenter = new FirstPresenter(repo, (FirstContract.View) fragment, projectId, userId);
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,如果进程被杀死然后重新启动,ViewPager它有自己的生命周期,因此getItem不再被调用 - 片段会自动重建,没有演示者.
这个问题有一个已知的解决方案吗?
我正在尝试将Crashlytics与我的应用程序集成并且它正在运行,但是通过的行号似乎是不正确的.这是我为我的测试异常得到的堆栈:
Fatal Exception: java.lang.RuntimeException: This is a test crash
at com.myapp.testapp.activity.MainActivity.animateReveal(MainActivity.java:42453)
at com.myapp.testapp.activity.MainActivity.onClick(MainActivity.java:1356)
at android.view.View.performClick(View.java:5204)
at android.view.View$PerformClick.run(View.java:21153)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Run Code Online (Sandbox Code Playgroud)
所以我的崩溃是在第1453行,但由于某种原因,它显示为42453?有趣的是,堆栈中的下一个行号是正确的......
Proguard的:
# Crashlitics
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
-keepattributes *Annotation*
Run Code Online (Sandbox Code Playgroud) 我正在使用GSON库来创建一个json对象并向其添加一个json数组.我的代码看起来像这样:
JsonObject main = new JsonObject();
main.addProperty(KEY_A, a);
main.addProperty(KEY_B, b);
Gson gson = new Gson();
ArrayList<JsonObject> list = new ArrayList<>();
JsonObject objectInList = new JsonObject();
objectInList.addProperty(KEY_C, c);
objectInList.addProperty(KEY_D, d);
objectInList.addProperty(KEY_E, e);
list.add(objectInList);
main.addProperty(KEY_ARRAY,gson.toJson(list));
Run Code Online (Sandbox Code Playgroud)
输出似乎包含一些意外的斜杠:
{"A":"a","B":"b","array":["{\"C\":\"c\",\"D\":\"d\",\"E\":\"e\"}"]}
Run Code Online (Sandbox Code Playgroud) 我需要一种在我的相机应用程序中检测面部的简单方法.我所关心的只是一个回调,说在某个地方检测到了一张脸,或者在预览中检测到了坐标.我注意到似乎有几种面部检测API - 在Google Play服务中以及遗留和相机2 API中.我应该将哪一个用于上述简单要求?
我有一个我想测试的方法,它看起来像这样:
private Disposable getStuff(){
return Observable
.combineLatest(
repoOne.getStuff(),
repoTwo.getOtherStuff(),
session.getSomethingElse(),
session.getOtherSomethingElse(),
(a, b, c, d) -> new Stuff.Builder()
.stuff(a)
.stuffB(b)
.stuffC(c)
.stuffD(d)
.build())
.throttleLast(500, TimeUnit.MILLISECONDS)
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui())
.subscribe(this::populateStuff, this::showError);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试测试此方法,但它没有通过throttleLast。我主要通过应用 a 来尝试它TestScheduler,但没有得到任何结果。例如我试过:
<...>
.throttleLast(500, TimeUnit.MILLISECONDS,mTestScheduler)
<...>
Run Code Online (Sandbox Code Playgroud)
然后当我调用该方法时,我将时间提前:
mCompositeDisposable.add(getStuff());
mTestScheduler.advanceTimeTo(0, TimeUnit.MILLISECONDS);
mTestScheduler.advanceTimeTo(505, TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)
但这没有任何作用,即populateStufforshowError仍然没有被调用。我可能使用TestScheduler不正确,有什么建议吗?
我知道我可以为不同的API级别添加不同的XML,例如,为值-v21和values-v19设置不同的样式.我想要了解的是构建系统如何实际使用这些不同的值?因此,例如,如果我在所有API中都有大部分样式,并且一个样式中的一个项目在21和其他样式之间发生变化,那么我是否:
1)将整个styles.xml复制到v21中,并更改我需要更改的一个值
2)只在v21下添加一个更改为styles.xml的样式
3)只添加那个在21下改变的一个样式的项目
令人困惑,我找不到任何文档,如何构建的进程处理合并样式.
我有两个活动,A和B.
1)从活动A,您可以转到B并通过后退按钮返回A(继续).
2)从活动A,你可以去B,做一个选择,通过重新加载它将返回到活动A. 在这里,我需要从后台堆栈中清除活动A的上一个副本.
在第二种情况下,我使用以下意图:
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我的新活动首先被绘制,然后我可以看到旧的副本被删除 - 所以有一些相同活动的动画消失了.是否有任何方法可以反转该行为,以便先删除旧活动,或者删除该动画?谢谢!
编辑:
就解决方法而言,现在我将活动A设置为singleTask清单,覆盖onNewIntent并重置我需要重新加载的所有对象onResume.这似乎工作,但我更喜欢一个干净的石板,即重新加载活动
android ×10
android-mvp ×1
crashlytics ×1
gson ×1
java ×1
json ×1
mvp ×1
rx-java ×1
rx-java2 ×1