背景:
我通过AlarmManager使用PendingIntent进行报警.
问题:
起初我认为为了取消之前的那些,我必须提供我之前用来启动警报的确切requestCode.
但后来我发现我错了,因为取消API说:
删除具有匹配Intent的所有警报.任何类型的警报,其Intent与此匹配的警报(由filterEquals(Intent)定义)将被取消.
看一下" filterEquals ",文档说:
为了意图解析(过滤)的目的,确定两个意图是否相同.也就是说,如果他们的行为,数据,类型,类别和类别是相同的.这不会比较意图中包含的任何额外数据.
所以我没有得到"requestCode"的用途......
问题:
什么是"requestCode"用于?
如果我使用相同的"requestCode"创建多个警报怎么办?他们互相覆盖了吗?
我注意到Android现在支持某种矢量绘图,通过一个名为" VectorDrawable " 的类(以及AnimatedVectorDrawable,BTW).我通过查看Android-Studio上的新功能找到了它.
我不知道这是否会是具有把多个文件分成多个文件夹(年底mdpi,hdpi,xhdpi,等).这将是伟大的,并可能在某些情况下最小化应用程序大小.
我想就这个新课提出几个问题:
是否可以在较旧的Android版本中使用它,也许可以通过甚至是Google支持库的库?
我不熟悉它是如何工作的,但Lollipop可以处理SVG文件吗?它可以做任何可以在SVG文件上实现的东西吗?
除了我发现的文档之外,是否有使用它的示例/教程/视频?
最近几个月,谷歌发布了一种名为" Firebase Analytics " 的新分析方案.
由于该应用已经拥有Google-Analytics,我发现一些障碍,我无法看到如何最好地处理.
以前,"newTracker"函数需要property-id.现在我没有看到它.这是否意味着它不需要一个?
以前,"enableAdvertisingIdCollection"也可用于收集广告信息.我在新的API中找不到它.它是自动收集的吗?
"setDryRun"可用于禁止将数据发送到服务器,现在我看不到它.对于应用程序的调试版本,这是否意味着它是自动的?是否所有函数都写入日志?
以前,我可以跟踪"屏幕":
public void setScreenName(String name) {
mGoogleAnalyticsTracker.setScreenName(name);
mGoogleAnalyticsTracker.send(new HitBuilders.ScreenViewBuilder().build());
}
Run Code Online (Sandbox Code Playgroud)
现在我没有看到它,但正如我所读到的,我认为它是自动的,因此无论如何它都会发送活动生命周期的数据.这是真的吗?
可能是最重要的事情:以前我可以跟踪使用类别,动作,标签和值:
public void trackEvent(final String category, final String action, final String label, final long value) {
mGoogleAnalyticsTracker.send(new HitBuilders.EventBuilder()
.setCategory(category).setAction(action)
.setLabel(label).setValue(value).build());
}
Run Code Online (Sandbox Code Playgroud)
现在我看到一种完全不同的方式来跟踪事件("自定义事件"),使用bundle.例:
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id);
bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, name);
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?它是如何在Firebase Analytics的网站上显示的?我想我可以让logEvent的第一个参数表现得像Google Analytics的类别参数,但是我能做什么/我应该做什么呢?根据文档,这应该没问题:
public void trackEvent(final String category, final String action, final String label, final long …Run Code Online (Sandbox Code Playgroud)在Android Marshmallow上,Google完全取消了对Apache HTTP客户端的支持(链接在这里),因为与替代方案相比,它没有良好的性能.
这可能也是Android Marshmallow上如此多应用程序崩溃的原因.
通过将此行添加到gradle文件,Google允许您仍然使用此API,而不是内置的API:
useLibrary 'org.apache.http.legacy'
Run Code Online (Sandbox Code Playgroud)
所以,这就是我做的:
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
Run Code Online (Sandbox Code Playgroud)
和:
android {
compileSdkVersion 'android-MNC'
buildToolsVersion "23.0.0 rc3"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.example.user.androidmtest"
minSdkVersion 'MNC'
targetSdkVersion 'MNC'
versionCode 1
versionName "1.0"
}
Run Code Online (Sandbox Code Playgroud)
当我尝试它时,它编译得很好(没有显示错误,我可以运行概念验证应用程序,因为它没有任何特殊代码),但当我尝试使用我知道的一些类时是旧API的一部分(如"HttpClient"类),我看到它不允许我这样做.
我知道不建议使用此解决方案,但我们必须让应用程序准备好至少暂时在那里工作,直到我们100%完成Android Marshmallow应该改变的所有事情,我们不希望出现意外情况.崩溃的形式.
这是一个截图:
它为什么会发生?我使用得当吗?
编辑:这里报告了这个问题:
我有一个使用Admob SDK的应用,用于显示插页式广告(全屏广告).
最近谷歌已经更新了SDK以及许多其他东西(构建工具,gradle插件,IDE等),包括admob(firebase ads).
compile 'com.google.firebase:firebase-ads:11.4.2'
Run Code Online (Sandbox Code Playgroud)
更新后,我注意到每当应用尝试展示插页式广告时,它都会崩溃.
崩溃日志是这样的:
10-28 14:01:01.394 4523-4523/... I/Ads: Ad opening.
10-28 14:01:01.400 1606-2154/? E/ActivityManager: Activity Manager Crash. UID:10080 PID:4523 TRANS:63
java.lang.IllegalStateException: Only fullscreen activities can request orientation
at com.android.server.am.ActivityRecord.setRequestedOrientation(ActivityRecord.java:2189)
at com.android.server.am.ActivityManagerService.setRequestedOrientation(ActivityManagerService.java:4975)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:1101)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2927)
at android.os.Binder.execTransact(Binder.java:697)
10-28 14:01:01.403 4523-4523/... D/AndroidRuntime: Shutting down VM
10-28 14:01:01.406 4523-4523/... E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{.../com.google.android.gms.ads.AdActivity}: java.lang.IllegalStateException: Only fullscreen activities can request orientation
Run Code Online (Sandbox Code Playgroud)
事情是,它之前工作得很好.现在我不确定是什么导致它发生.
在网上搜索,我没有看到任何谈论"只有全屏活动可以请求定位"的内容.
我在清单中所拥有的东西有点陈旧,可能不再需要了:
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent"/>
Run Code Online (Sandbox Code Playgroud)
我说它可能不需要,因为我不能在教程中看到它,即使我记得我过去做过:
在ListView上,您可以使用快速滚动条,允许您拖动滚动条以轻松滚动到您希望的任何位置(使用fastScrollEnabled属性)
与" SectionIndexer "类和可选的一些属性一起,您可以在使用此滚动条时显示一个很好的弹出窗口(此处链接).
联系人应用程序上会显示这样的内容,以便您可以轻松滚动到特定字母.
RecyclerView似乎没有任何这些.甚至不是快速滚动.
如何为RecyclerView添加快速滚动功能?
android scrollbar fastscroll sectionindexer android-recyclerview
Google有多种工作/任务调度解决方案,例如JobScheduler和GcmTaskService.每个都有自己的优点和缺点.
最近,Google推出了一个名为"Firebase JobDispatcher"的新库.
遗憾的是,关于这个新API的知识很少.事实上,很难找到任何关于它的东西.
我发现的只有他们的公告视频和样本.但即使是他们,也没有太多关于这个API的知识.
看看之前的问题,调查和我与其他API(例如,这里)的比较,我想问一下新的API是如何工作的,并且知道在使用它时应该考虑什么:
作业是否可以使用与之相关的参数,甚至可以在需要时进行修改?他们在示例中说" 一个可选的用户提供的附加软件包.默认是一个空的Bundle. "这是吗?它可以在执行时被作业修改吗?
工作可以轻松重新安排吗?它被称为" 一个布尔值,表明作业是否应该重复 ".怎样才能选择何时重新安排?我已经尝试了样本,并选择了"Recurring",但它似乎没有再次运行,只有一次.
它可以保护与图书馆的工作(因为独特的ID)吗?
更新应用程序时是否需要格外小心(如先前的API所做的那样)?更新应用后,仍可安排作业吗?对样本进行测试,似乎在更新应用程序后作业已完全消失.可以避免吗?
RECEIVE_BOOT_COMPLETED如果我希望即使重启设备仍然可以安排作业,是否需要?样本似乎有它.
是否可以获取所有预定作业及其信息(包括参数)的列表,并能够取消特定/所有作业甚至修改它们?
在清除数据操作应用程序时,是否会删除作业?
是否有可能告诉工作它最好在一段时间内运行(例如:早上7点到8点之间)?它被提到" ExecutionWindowTrigger - 它指定了一个应该执行Job的时间窗口 ".是吗?当它错过这个窗口会发生什么?
该方法onStartJob的JobService类返回一个布尔和它的说明" 是否有剩余的更多的工作. "这是什么意思?方法的needsReschedule参数是什么jobFinished意思?它们是否相互关联?
我应该知道有什么限制吗?例如,每个函数的最小值和最大值?
android android-jobscheduler firebase-job-dispatcher gcmtaskservice
根据Andriod文档的"资源缩小"网页(此处),您可以通过build.gradle文件使用以下行来最小化应用程序的大小:
android {
...
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
Run Code Online (Sandbox Code Playgroud)
而且,他们说在使用它时,它还会告诉你在这个过程中节省了多少:
启用shrinkResources时,构建应用程序时应在构建期间显示如下输出:
...删除未使用的资源:二进制资源数据从2570KB减少到1711KB:已删除33%
我无法找到这些问题的答案:
我尝试添加许多应用程序所显示的相同功能,其中屏幕的上部区域根据滚动内容缩小和扩展.
为此,我使用了Google的设计库,如CheeseSquare示例所示.
事实是,无论NestedScrollView中有多少内容,它都允许我在内容的最后一个视图下方滚动,只是为了让我看到动作栏的最终状态,具有最小的自身大小.
简而言之,这是我在滚动到底部时看到的内容(CheeseSquare示例的修改内容):
虽然这是滚动到底部时我想要的(从联系人应用程序中获取):
我也试图修复ThreePhasesBottomSheet示例中的一个错误,即使它处于窥视状态,滚动底部内容也是可能的.要重现,请开始水平滚动(这不会做任何事情,因为没有任何东西可以滚动),然后垂直滚动,这会以某种方式触发底部内容的滚动.
因此,我需要在"transformView()"方法中禁用滚动,在"翻译"的情况下
这是使用正常用法的方式:
这就是它如何处理不阻止滚动的错误:
我试图使用" layout_scrollFlags "标志,将高度更改为wrap_content,并删除clipToPadding和fitsSystemWindows属性.
这是示例XML文件,我已将其修改为仅包含一个cardView而不是多个:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="@dimen/detail_backdrop_height"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp">
<ImageView
android:id="@+id/backdrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="24dp">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/card_margin">
<LinearLayout
style="@style/Widget.CardContent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Info" …Run Code Online (Sandbox Code Playgroud) android material-design android-design-library android-collapsingtoolbarlayout nestedscrollview
我需要使用后台服务监控用户的位置,然后加载它们并显示用户的路径.
使用活动,获取GPS位置非常容易,但是当我通过服务完成它时,我遇到了一个问题,因为它似乎只适用于looper线程(或类似的东西).
当我在互联网上寻找解决方案时,我发现许多人遇到了同样的问题,但我找不到合适的解决方案.有人说你需要使用prepare-> loop-> quit,有些人说你必须使用handlerThread,但是,我仍然无法找到如何以正确的方式做这些事情.
android ×10
admob ×1
alarmmanager ×1
android-collapsingtoolbarlayout ×1
build.gradle ×1
fastscroll ×1
gps ×1
gradle ×1
java ×1
location ×1
scrollbar ×1
service ×1
vector ×1