Articles of 安卓

isExternalStorageRemovable和isExternalStorageEmulated之间的区别

在API 9中添加了Environment.isExternalStorageRemovable() 并且在API 11中添加了Environment.isExternalStorageEmulated() 当getExternalStorageDirectory的路径可移动或不移动时, isExternalStorageRemovable返回true,更像是SD卡,如果返回false,则其内部存储永远不能被物理移除。 并且isExternalStorageEmulated只是与isExternalStorageEmulated相反? 现在,我的问题是什么区别? 它只是具有相反输出的不同名称吗?

Android – 从浏览器访问本地主机,无需连接互联网

我在Android平板电脑上安装了本地Web服务器。 但是当所有连接都关闭时,每次我从内置浏览器(或Chrome)访问本地站点时,我都会收到关于“没有互联网连接”的烦人popup消息或者有关SIM卡的信息……有什么方法可以避免这种情况吗?

如何通过Android中的reflection实例化一个监听器

我必须为Android 1.6(API 4)开发一个应用程序,该应用程序应该能够在Android 2.2或更高版本的手机中使用OnAudioFocusChangeListener(自Android 2.2-API 8以来可用)。 任何人都可以告诉我如何通过reflection实例化一个监听器? 我已经设法通过reflection运行静态和非静态方法,但我不知道如何处理侦听器。 这是反映的倾听者: AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); OnAudioFocusChangeListener audioListener = new OnAudioFocusChangeListener() { @Override public void onAudioFocusChange(int focusChange) { // code to execute } }; public void getAudioFocus() { audioManager.requestAudioFocus(audioListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); } public void releaseAudioFocus() { audioManager.abandonAudioFocus(audioListener); } 这是我设法通过reflection运行的方法的代码示例: Class BluetoothAdapter = Class.forName(“android.bluetooth.BluetoothAdapter”); Method methodGetDefaultAdapter = BluetoothAdapter.getMethod(“getDefaultAdapter”); […]

Android bindService或/和startService

我想使用bindService方法创建Service。 但当我关闭一个Activity时,我的服务被销毁了,我不希望这样。 我尝试使用startForeground(NOTIFICATION_ID, notification);将服务放在前台startForeground(NOTIFICATION_ID, notification); 服务onCreate,但服务仍然破坏。 现在我尝试使用call两个方法同时启动Service: Intent bindIntent= new Intent(this, ServiceC.class); startService(bindIntent); bindService(bindIntent, onService, BIND_AUTO_CREATE); 通过调用这两个方法Service不会被破坏。 我的应用程序可以正常使用此方法。 有人可以向我解释这是否是一个好方法,或者如果不是,请你告诉我为什么startForeground(NOTIFICATION_ID, notification); 不起作用? 使用bindService的最佳方法是什么,但同时我不希望服务自行销毁。

Android转换为序数格式

在我重新发明轮子之前,Android是否有任何设施可以将整数转换为具有多语言支持的序数字符串? 也就是说,它会将整数3转换为英语中的“3rd”和法语中的“3eme”。 我可以使用一些逻辑以及Android的自动字符串替换来看到自己如何做到这一点,但认为这肯定是其他人必须遇到的,而不仅仅是与日期一起使用。

在准备状态下安全重置MediaPlayer?

我正在使用MediaPlayer编写一个音频播放器,允许用户跳过实际曲调。 跳过请求可能随时发生,包括在调用MediaPlayer.prepareAsync和即将发生的onPrepared回调之间。 医生说: 重要的是要注意,准备状态是暂时状态,并且在MediaPlayer对象处于准备状态时调用任何具有副作用的方法的行为是未定义的。 这包括调用重置,甚至释放? 因为如果是这样,那么我要么必须等待onPrepared回调重用MediaPlayer或分配一个全新的MediaPlayer,如果我不想等待并在onPrepared回调上发布过时的那个,对吧?

当滑动到不同的viewpager页面时,如何使用layout_scrollFlags再次显示先前隐藏的工具栏

目前,我有以下页面与ViewPager 滚动INFO选项卡中的页面时,将隐藏工具栏。 此行为通过CoordinatorLayout , AppBarLayout和app:layout_scrollFlags 所以,这是滚动后的样子。 滚动后,隐藏工具栏 由于这是一个ViewPager ,如果我滑动到FINANCIAL选项卡,它将如下所示。 随后是滑动 由于FINANCIAL选项卡中的页面无法滚动,因此我们希望不要隐藏Toolbar 。 我想知道,当刷到不同的ViewPager页面时,如何使用layout_scrollFlags再次显示以前隐藏的工具栏?

为每个构建版本配置Firebase Analaytics + Google跟踪代码管理器(GTM)

在Firebase Analytics可用之前,我们使用多风格,多构建types的Android Gradle项目设置,并为每个构建变体提供不同的GTM容器ID,如下所示: TagManager.getInstance(context) .loadContainerPreferNonDefault(BuildConfig.GTM_CONTAINER_ID, -1); TagManager.getInstance(context).getDataLayer().pushEvent(eventName, eventData); Gradle将为每个构建变体注入不同的GTM_CONTAINER_ID 。 我们如何使用Firebase Analytics + GTM实现相同目标? 根据文档 ,我们需要下载: GTM仪表板中的GTM容器文件[1] 来自Firebase控制台的google-services.json文件[2] 然后用这个开始触发事件: FirebaseAnalytics.getInstance(context).logEvent(eventName, bundle); 我们在哪里指定要使用的GTM容器ID? 或者它是从我们从GTM仪表板下载并放在assets/containers下的文件名自动派生的? 如果是这样,我们如何使用每个构建变体的不同GTM配置,就像我们使用GTM遗留Android容器一样?

firebase中的用户组

User定义为: public class User { private String email; private String uid; private List groups; public User(String email, String uid) { this.email = email; this.uid = uid; this.groups = new ArrayList(); } public User() {} public User(String email, String uid, ArrayList groups) { this.email = email; this.uid = uid; this.groups = groups; } public String getEmail() […]

VFY:无法解析静态方法10876:Android

我在我的程序中使用了SmsCbMessage.java类。 它取自http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/telephony/SmsCbMessage.java#SmsCbMessage以下是我的程序。 package com.android.internal.telephony; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsCbMessage; import android.widget.Toast; public class MainActivity extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //—get the CB message passed in— Bundle bundle = intent.getExtras(); SmsCbMessage[] msgs = null; String str = “”; if (bundle != null) { //—retrieve the […]