我想看看是否可以获得有关当前正在播放的歌曲的信息,以便能够显示有关该歌曲的更多信息,或者仅显示我获得的信息。
我想检查一下,因为我注意到在一个名为“Musicolet”的流行音乐播放器应用程序上有一个“广播专辑封面”的设置(此处)。当然,它只说“专辑艺术”,但它也说它适用于“第三方”。所以我想研究一下是否可能。
不确定是否可能。我看到关于它的相互矛盾的答案。
我发现了一些关于它的有趣链接:
当然,我尝试使用从这些链接中找到的提示,但未能真正发挥作用。
所以也许过去是不可能的,后来就有可能了。但由于某种原因,我没有看到如何使用它的示例/教程,包括文档中的示例/教程。
我认为如果可能的话,它需要通知访问,因为这与从音乐播放器的通知中读取当前播放的音乐大致相同。
是否可以注册歌曲播放时间的回调(也可以随时查询)并获取有关它的信息?
意思是歌曲标题、专辑名称、文件路径/uri、专辑封面...
如果可以的话,怎样做?它需要什么?
如果不可能,有什么解决方法吗?有什么适用于某些应用程序的东西吗?也许通知中存在某种东西,更正式地说,我可以检测到它是这种类型的,并获取此信息?
我正在制作一个需要显示一个简单的Web视图的应用程序,其中包含一个linkedIn联系人的页面。
根据我所看到的URL应该是:
http://www.linkedin.com/profile/view?id=XXX
Run Code Online (Sandbox Code Playgroud)
其中XXX是联系人的ID。
由于某种原因,我一直只获得LinkedIn的徽标,而不是真实的网页。
我以为是因为重定向问题,但是我不确定。
这是代码:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView);
final WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(true);
final String url = ...
mWebView.loadUrl(url);
// needed in order to support javascript alerts and other javascript operations
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
super.shouldOverrideUrlLoading(view, url);
view.loadUrl(url);
return true;
}
});
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过返回false,但是它不起作用。这可能是一个很小的错误。
有人可以帮忙吗?
我正在试图找出如何从互联网上查找图像,并在Android上显示它们(缩略图和全屏).
不仅谷歌已经弃用了以前的方式,但现在他们有一种称为"自定义搜索"的新文档:
后来,谷歌选择开发者应该使用"谷歌播放服务",但再次,我找不到这个特定任务的正确命令.这是我发现的:https: //developer.android.com/google/auth/api-client.html
我发现了很多链接,但不知道哪些是谷歌建议的最好的,我也不知道为什么几乎没有任何样本(更不用说Java和搜索功能)......
由于所有内容都已合并,并且由于文档(和示例)很少,我想问一下是否有一个如何使用这个新SDK实现图像搜索的示例,也许是否有一个库使其更容易.
我还想问一下没有Google Play服务的设备会发生什么 - 它还能运行吗?
我知道通过代码启动活动时可能没有动画(此处),但是也可以通过 adb 这样做,即使对于应该有动画的活动也是如此?
另外,从这个打开的活动返回时是否可以没有动画?
adb 可用于对视图、触摸、击键等进行各种操作...
它还可以检查或改变视图的焦点吗?
例如,如果当前活动有很多视图,并且我想在 listView 上滚动,我可以通过提供其 id 来选择要聚焦的 listView,它将获得焦点,以便我可以模拟向下翻页键。或者,我可以模拟 tab 键,直到看到当前聚焦的视图是 listView。
有很多方法可以为TextView中显示的部分文本设置样式,例如设置其前景色(此处)和其他(此处).
我无法确定是否有办法在TextView 的部分文本上设置矩形虚线/虚线轮廓.像这样的东西:
我试图寻找这样的解决方案,并且我也尝试阅读CharacterStyle的文档.尽管如此,我认为任何可用的跨度都不适合这种风格.
是否有内置的解决方案,或者我是否需要使用自定义的实现?
我使用了下面建议的修改版本,它在POC上运行良好,但出于某种原因,在实际项目中,文本两侧的垂直虚线是粗体:
这是当前的代码:
要使用的字符串
<string name="text_to_format">test   %1$s test</string>
Run Code Online (Sandbox Code Playgroud)
使用代码
final String textToDash="DASHED";
String formattedStr = getString(R.string.text_to_format, textToDash+ "<bc/>");
Spanned textToShow = Html.fromHtml(formattedStr, null, new TagHandler() {
int start;
@Override
public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) {
switch (tag) {
case "bc":
if (!opening)
start = output.length() - textToDash.length();
break;
case "html":
if (!opening)
output.setSpan(
new …Run Code Online (Sandbox Code Playgroud) 在使用Android O之前,为了获得应用程序的大小,您必须具有特殊的权限,并使用隐藏的API。
这样的解决方案不再起作用,但是Google提供了一个不太细粒度的官方API:queryStatsForPackage,它返回StorageStats对象。
但是,我找不到有关如何使用它的任何信息。
与仅需要应用程序包名称的隐藏API相比,该API还需要“ String volumeUuid”和“ UserHandle user”。
我正在使用Android 的Threetenbp backport (此处)来处理各种与时间相关的数据操作。
其中之一是将时间转换为不同的时区(当前为 UTC 并返回)。
我知道如果你使用类似的东西这是可能的:
LocalDateTime now = LocalDateTime.now();
LocalDateTime nowInUtc = now.atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime();
Run Code Online (Sandbox Code Playgroud)
这工作得很好,而且也很容易做相反的事情。
我试图避免库的初始化,它会向其中加载相当大的区域文件。我已经弄清楚如何在没有这个的情况下处理各种日期/时间相关的操作,除了转换为 UTC 并返回的情况。
我得到的结果与正确的转换相差整整 1 小时。
这是我发现并尝试过的:
// getting the current time, using current time zone:
Calendar cal = Calendar.getInstance();
LocalDateTime now = LocalDateTime.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY),
cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND) * 1000000);
//the conversion itself, which is wrong by 1 hour in my tests:
LocalDateTime alternativeNowInUtc = now.atZone(ZoneOffset.ofTotalSeconds(TimeZone.getDefault().getRawOffset() / 1000)).withZoneSameInstant(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0))).toLocalDateTime();
Run Code Online (Sandbox Code Playgroud)
我写的到底有什么问题?如何在不初始化库的情况下获得转换时间的替代代码?
给定 LocalDateTime …
我正在尝试以中心裁剪方式显示视频(就像在 ImageView 上一样)。
我也希望我能找到如何以其他方式进行扩展,就像在这个库上所做的那样。
我用它来达到这个目的:
player!!.videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,它不进行中心裁剪。
查看文档,我看到了这一点:
“请注意,缩放模式仅适用于启用基于 MediaCodec 的视频渲染器且输出表面归 SurfaceView 所有的情况。”
所以我尝试在 XML 文件中设置它:
app:surface_type="surface_view"
Run Code Online (Sandbox Code Playgroud)
但这也没有帮助。我也没有看到它在代码中可用。
我尝试搜索此类的任何带有“渲染器”或“编解码器”的内容,但不存在。
这是我使用的代码(基于此:https://github.com/yusufcakmak/ExoPlayerSample):
class MainActivity : AppCompatActivity() {
val VIDEO_URL = "https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4"
private var player: SimpleExoPlayer? = null
private var window: Timeline.Window? = null
private var mediaDataSourceFactory: DataSource.Factory? = null
private var trackSelector: DefaultTrackSelector? = null
private var shouldAutoPlay: Boolean = false
private var bandwidthMeter: BandwidthMeter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) …Run Code Online (Sandbox Code Playgroud) 开发人员可以通过多种方法为tools:XML中的已知视图设置各种属性,以便它们仅在编辑模式下(在IDE上)而不在运行时出现:
https://developer.android.com/studio/write/tool-attributes#tools_instead_of_android
因此,如果您有TextView,则可以设置tools:text="hello",并且仅在IDE中显示。
当我使用此功能很长时间后,我没有找到有关如何创建此类属性或让我自己的自定义视图支持它们(现有属性或新属性)的文档。
我试图达到像普通属性一样的属性,但是我认为这是不可能的(或者我做错了)。
我很长一段时间以来所知道的是,我可以使用View.isInEditMode来检查代码是否现在正在IDE上运行。但这只是一小步。
给定我已创建的自定义视图,如何使其支持现有的可能tools:属性?例如,假设我没有从TextView扩展,但是我希望支持tools:text,该怎么办?
如何tools:为自定义视图创建新属性?
从 API 20(“L”?或者可能是 Android Wear?)开始,现在有一个新的,叫做“ banner ”。以下是文档对此的说明:
此组件横幅的可绘制资源标识符(在包的资源中)。来自“横幅”属性,如果未设置,则为 0。
所以这并没有提供太多关于它是什么的线索......
问题是我不知道它是什么,也找不到有关它的任何信息。
我试过在互联网上找到这个,但因为“横幅”是一个通用名称,我没有发现任何有趣的东西......
当然,我也试过在活动文档(这里和这里)上搜索这个,但没有找到任何东西......
它用于哪里?
它适用于 Android "L" 还是 Android Wear?或者两者都有?
谷歌为什么决定这样做?
我在哪里可以阅读它?
是否有任何指导方针?
取决于答案,您认为它会以某种方式成为支持库的一部分吗?
icons android android-manifest graphical-logo android-banner
我正在尝试实现与“相机”应用程序的模式相似的功能:
我可能不需要使用ViewPager,因为它似乎在水平列表上方使用,但最好将其作为选项。
从技术上讲,我成功地将RecyclerView中心作为其项目,但实际上并不能让您将所有项目都放在中心(例如,第一个/最后一个)。当您尝试滚动到头一个或最后一个项目时,由于您已经到达RecyclerView的边缘,它不允许您使用:
不仅如此,而且一开始它并没有真正居中,而且如果我拥有RecyclerView的项目很少,那么就会成为一个问题,因为我希望将它们居中,但是却需要android:layout_width =“ match_parent”(因为所有它应该是可触摸的)产生以下内容:
在拥有android:layout_width =“ wrap_content”的同时给我这个:
在这两种情况下,我都无法滚动。当它是“ wrap_content”时,这是一个问题,因为我将无法在侧面滚动。
可以对齐这些项目,以便在RecyclerView的中心始终有一个项目,如下所示:
val snapHelper = LinearSnapHelper()
snapHelper.attachToRecyclerView(categoriesRecyclerView)
Run Code Online (Sandbox Code Playgroud)
我们还可以得到这是在中心的项目(如图所示这里),由具有滚动监听器和使用snapHelper.findSnapView(layoutManagaer)。
但是正如我写的那样,我真的不能以这种方式选择第一个/最后一个项目,因为我无法滚动到它的中间位置。
我试图查看相关类的文档,但找不到这种东西。
这是当前代码(此处提供示例):
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView.adapter = object : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val holder = object : RecyclerView.ViewHolder(
LayoutInflater.from(this@MainActivity).inflate(
R.layout.list_item,
parent,
false
)
) {}
holder.itemView.setOnClickListener {
}
return holder
}
override fun getItemCount(): Int …Run Code Online (Sandbox Code Playgroud)