我已经实现了一个由AlarmManager触发的BroadcastReceiver.AlarmManager在BOOT_COMPLETED上初始化.所以我必须在清单中声明接收器.
我的问题是我希望BroadcastReceiver只在我自己的活动都不在前台时做某事(也就是说用户没有与我的应用程序交互).我从远程服务器提取信息,并且不想通知用户他当前是否在我的应用程序中.
到目前为止,我还没有找到一种方法来确定我的应用程序是否在前台.有没有办法做这样的事情?ActivityManager告诉我我的应用程序是否正在运行,但不是它是否在前台.
问题与此处描述的几乎相同:只有在广播接收器处于前台时才通知它
解:
在评估了几个解决方案后,我想快速概述一下我认为在后台/前台处理活动的最佳方法.
首选方法是在活动的onResume方法中注册广播接收器,并在onPause上的活动上注销它.任何服务或其他背景元素都需要通过您的活动将拦截的特定操作发送广播意图.
如果您的活动位于前台,它将使其意向接收者注册,并能够直接处理您的服务发送的意图.如果它不在前台,它将不会接收到意图,但是调用广播的服务将知道没有人截获其广播意图并且能够自己处理它.例如,它可以启动所需的活动,显示通知等.
在几个android样式教程中使用了我在android.R.style.*styles中找不到的父样式元素(http://developer.android.com/reference/android/R.style.html).
一些示例来自http://android-developers.blogspot.com/2011/04/customizing-action-bar.html操作栏文章.尼克使用父样式,如:
<style name="MyDropDownNav" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar">
...
</style>
Run Code Online (Sandbox Code Playgroud)
要么
<style name="MyActionBarTabStyle" parent="android:style/Widget.Holo.Light.ActionBarView_TabView">
...
</style>
Run Code Online (Sandbox Code Playgroud)
这些父母风格来自哪里?是否可以列出所有可用的父样式?
谢谢.
我想在最新的Android Lollipop预览版中使用elevation属性.我将targetSdk设置为21,将主题设置为Material.接下来,我将一个背景形状添加到TextView并将高程设置为8dp,但TextView没有显示任何阴影的迹象.这是在运行棒棒糖预览的Nexus7上.还有什么我需要考虑的吗?
这是布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/rect"
android:text="hallo world"
android:padding="8dp"
android:elevation="8dp" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是背景可绘制的:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#7d0073ff" />
<corners android:radius="16dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
这是TextView:
我试图EditText
在运行时以编程方式更改View 的着色颜色.基本上我想改变你通常应用的内容,?attr/colorControlNormal
就像在默认背景drawable中一样.
仅new ColorsStateList
使用一种颜色设置更改背景色调无法正确应用:
editText.setBackgroundTintList( ColorStateList.valueOf( color ) );
首先,EditText
虽然应用了色调列表并且内部改变了drawable,但结果将应用于所有结果.此外,默认背景1中指定的alpha 在开头可见.
这是在第一个上设置色调颜色的结果EditText
:
所以我的问题是:如何以编程方式将色调正确应用于EditText
?
我试图计算多行文本段落的宽度.据我所知,唯一可以在Android中执行此操作的类是StaticLayout(或DynamicLayout)类.当使用这个类时,我没有得到我的文本片段的适当长度,而是测量的尺寸有时更小,有时更大,取决于文本大小.
所以我基本上在寻找一种可靠地测量多行文本字符串宽度的方法.
下图显示了测量宽度与各种文本大小的实际文本长度的差异.
在自定义视图中运行以下代码创建屏幕截图:
@Override
protected void onDraw( Canvas canvas ) {
for( int i = 0; i < 15; i++ ) {
int startSize = 10;
int curSize = i + startSize;
paint.setTextSize( curSize );
String text = i + startSize + " - " + TEXT_SNIPPET;
layout = new StaticLayout( text,
paint,
Integer.MAX_VALUE,
Alignment.ALIGN_NORMAL,
1.0f,
0.0f,
true );
float top = STEP_DISTANCE * i;
float measuredWidth = layout.getLineMax( 0 );
canvas.drawRect( 0, top, measuredWidth, top + curSize, bgPaint …
Run Code Online (Sandbox Code Playgroud) 我使用自定义Parcelable将一些数据传送到BroadcastReceiver.这是我做的:
我注册了我的意图并在其上设置了额外的Parcelable以及一个额外的类加载器(intent.setExtraClassLoader(..)).接下来,我通过AlarmManager安排广播的执行.
因此,当AlarmManager触发时,它会查看我的意图,因为它不使用提供的类加载器(因为它接缝),因此无法处理它的包裹.
我认为当Inten.fillIn将意图复制到一个新的时,类加载器会丢失(请参阅堆栈跟踪).
02-21 21:09:25.214: WARN/Intent(52): android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.company.project.MyParcelable
02-21 21:09:25.214: WARN/Intent(52): at android.os.Parcel.readParcelable(Parcel.java:1822)
02-21 21:09:25.214: WARN/Intent(52): at android.os.Parcel.readValue(Parcel.java:1713)
02-21 21:09:25.214: WARN/Intent(52): at android.os.Parcel.readMapInternal(Parcel.java:1947)
02-21 21:09:25.214: WARN/Intent(52): at android.os.Bundle.unparcel(Bundle.java:169)
02-21 21:09:25.214: WARN/Intent(52): at android.os.Bundle.putAll(Bundle.java:242)
02-21 21:09:25.214: WARN/Intent(52): at android.content.Intent.fillIn(Intent.java:4530)
02-21 21:09:25.214: WARN/Intent(52): at com.android.server.am.PendingIntentRecord.send(PendingIntentRecord.java:185)
02-21 21:09:25.214: WARN/Intent(52): at android.app.PendingIntent.send(PendingIntent.java:400)
02-21 21:09:25.214: WARN/Intent(52): at com.android.server.AlarmManagerService$AlarmThread.run(AlarmManagerService.java:636)
Run Code Online (Sandbox Code Playgroud)
那么有什么方法可以解决这个问题吗?任何帮助,将不胜感激.
谢谢
我正在寻找一种方法来排除我的jacoco分析中的特定类方法.我知道"排除"属性,但这仅适用于整个类.
在我的情况下,我已经生成了扭曲覆盖率报告的方法,所以我想从报告中排除它们.
我使用 jetpack compose 和导航撰写库来从一个屏幕导航到下一个屏幕。通常你会有一个ViewModel
负责用户交互的(例如:)viewModel.addItem()
。为了完成 addItem 命令,我想通过显示另一个屏幕navController.navigate()
。其ViewModel
本身通过 注入到可组合项中hiltNavGraphViewModel()
。
现在的问题是:我怎样才能将其注入到刀柄NavController
中?ViewModel
@HiltViewModel
class ScreenViewModel @Inject constructor(
private val navController: NavController // where does it come from?
) : ViewModel() {
fun addItem() {
navController.navigate("add-item-screen")
}
}
Run Code Online (Sandbox Code Playgroud)
它NavController
是通过rememberNavController()
可组合层次结构中的 up 方法创建的。我也不想将控制器传递到可组合层次结构或使用 CompositionLocal。首选方法是让控制器在 ViewModel 中可用。
android-jetpack-navigation android-jetpack-compose dagger-hilt
我有关于angulardart和登录流程的结构问题.我有一个服务,它与服务器进行通信,并具有login(),logout(),loggedIn()等方法.这一切都在角度很好地工作,但我正在寻找一种最佳实践方式将登录流程合并到我的应用程序中.
该应用程序要求用户登录.因此,当用户未登录时,我是否会在启动时重新路由到自定义"登录"视图?我还没有登录时切换主index.html的部分内容吗?我会创建一个处理登录的自定义组件吗?
对于这种情况,是否存在共同的角度模式?