小编NiT*_*hDi的帖子

Android:以编程方式检测设备是否具有硬件菜单按钮

我目前正在努力解决这个问题.我需要检查安装了应用程序的设备是否有硬件菜单键.因为它不存在于像Galaxy Nexus这样的设备上,所以我在这种情况下直接在UI中显示它.

我已经查看了PackageManager.hasSystemFeature(),但没有找到任何有用的东西.

有没有人这样做过?

hardware android menu key

42
推荐指数
2
解决办法
3万
查看次数

Android - Google Play过滤掉xxhdpi

我目前在使用Google Play过滤和新密度等级xxhpdi时出现问题,这是在API级别16中引入的.我的应用程序被拆分为3个APK文件(我知道这不是最好的做法,但由于计划不好,我此刻必须这样做).有趣的部分是Android 4.0的版本,仅限智能手机.我在AndroidManifest.xml中设置了市场过滤器,如下所示:

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17"/>
<compatible-screens>
    <screen android:screenDensity="ldpi" android:screenSize="small"/>
    <screen android:screenDensity="mdpi" android:screenSize="small"/>
    <screen android:screenDensity="hdpi" android:screenSize="small"/>
    <screen android:screenDensity="xhdpi" android:screenSize="small"/>

    <screen android:screenDensity="ldpi" android:screenSize="normal"/>
    <screen android:screenDensity="mdpi" android:screenSize="normal"/>
    <screen android:screenDensity="hdpi" android:screenSize="normal"/>
    <screen android:screenDensity="xhdpi" android:screenSize="normal"/>
</compatible-screens>
Run Code Online (Sandbox Code Playgroud)

现在的问题是,像HTC Droid DNA这样的具有1080p屏幕的新设备无法查看或安装我的应用程序,因为我没有指定它也支持xxhdpi屏幕.问题是,因为我将我的minSdkVersion设置为API Level 14,即Android ICS,我不能简单地添加以下行:

<screen android:screenDensity="xxhdpi" android:screenSize="normal"/>
Run Code Online (Sandbox Code Playgroud)

这是因为API级别14不知道xxhdpi类.有没有解决我的问题的方法,而无需创建第4个单独的APK文件?

谢谢.

compatibility android resolution screen android-manifest

9
推荐指数
1
解决办法
5592
查看次数

Android - 使用来自网络的数据更新服务小部件.最好的方法?

我对Android小部件尤其是Android服务有疑问.这就是我想要做的事情:在手机上,用户应该能够将我的小部件添加到他的主屏幕.小部件从网络获取其数据.在阅读了一些有关此问题之后,我发现最好的方法是创建一个从网络(TCP套接字)获取数据然后不断更新小部件的服务.这是通过ScheduledExecutorService完成的,它在某个时间间隔内执行Runnable.Runnable将连接到服务器,获取数据并应更新小部件).

我现在的问题是,当屏幕关闭时,小部件不需要更新,因此由于电池耗尽,服务不应该运行.我的问题是:如何做到最好的方式?

我找到了两种或多或少做我想要的方法:

  1. 当小部件的第一个实例添加到主屏幕时,它将注册一个广播接收器,该接收器从Android OS接收ACTION_SCREEN_ON和ACTION_SCREEN_OFF意图动作.如果触发ACTION_SCREEN_ON,它将启动更新程序服务,否则将停止它.但由于广播接收器的使用寿命,我真的不确定这是否是一个好方法.

  2. 在更新程序服务的Runnable中,它由ScheduledExecutorService定期执行并实际执行网络内容,如果屏幕打开,我通过PowerManager.isScreenOn()进行检查.如果是,我执行网络代码,否则不执行.但是什么时候设备处于待机状态?这个代码执行了吗?电池耗尽怎么样?

对于我想做的事情,是否可能采用"最佳实践"方法?我已经阅读了很多关于AlarmManager的信息,它是一个非常强大的工具.您是否可以通过此方式安排任务,只有在显示器打开时才会执行?

谢谢你的帮助.

最诚挚的问候NiThDi

service networking android widget

6
推荐指数
1
解决办法
2940
查看次数

检查外部存储状态时,Android logcat错误"getExternalStorageState/mnt/sdcard"

在我的Galaxy Tab 10.1上,在检查外部存储状态时出现奇怪的logcat错误:

Environment.getExternalStorageState();
Run Code Online (Sandbox Code Playgroud)

Logcat说:

03-10 14:13:22.700: E/Environment(32754): getExternalStorageState/mnt/sdcard
Run Code Online (Sandbox Code Playgroud)

在Google上搜索时没有真正找到有用的东西.我发现的唯一信息可能与文件系统有关.

这个错误可以修复吗?我在这个小型测试项目中使用了API Level 11.

编辑:只是为了澄清... getExternalStorageState()工作并返回MEDIA_MOUNTED,我只是好奇这个logcat错误.

tabs android external logcat galaxy

5
推荐指数
1
解决办法
1283
查看次数

Android O - android.intent.action.PROVIDER_CHANGED受BroadcastRecevier限制?

在阅读新的Android O限制时,我注意到Google Devs限制了清单中BroadcastReceivers的使用.他们使用术语隐式和显式BroadcastReceivers,但我无法弄清楚它们究竟是什么意思.例如,我有一个应用程序,它使用android.intent.action.PROVIDER_CHANGED广播来监听日历中的更改:

<receiver
    android:name=".receivers.CalendarReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PROVIDER_CHANGED"/>

        <data android:scheme="content"/>
        <data android:host="com.android.calendar"/>
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

当应用程序针对Android O时,此接收器是否会受到新限制的影响?

谢谢.

android broadcastreceiver android-8.0-oreo

0
推荐指数
1
解决办法
1410
查看次数