我目前正在努力解决这个问题.我需要检查安装了应用程序的设备是否有硬件菜单键.因为它不存在于像Galaxy Nexus这样的设备上,所以我在这种情况下直接在UI中显示它.
我已经查看了PackageManager.hasSystemFeature(),但没有找到任何有用的东西.
有没有人这样做过?
我目前在使用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文件?
谢谢.
我对Android小部件尤其是Android服务有疑问.这就是我想要做的事情:在手机上,用户应该能够将我的小部件添加到他的主屏幕.小部件从网络获取其数据.在阅读了一些有关此问题之后,我发现最好的方法是创建一个从网络(TCP套接字)获取数据然后不断更新小部件的服务.这是通过ScheduledExecutorService完成的,它在某个时间间隔内执行Runnable.Runnable将连接到服务器,获取数据并应更新小部件).
我现在的问题是,当屏幕关闭时,小部件不需要更新,因此由于电池耗尽,服务不应该运行.我的问题是:如何做到最好的方式?
我找到了两种或多或少做我想要的方法:
当小部件的第一个实例添加到主屏幕时,它将注册一个广播接收器,该接收器从Android OS接收ACTION_SCREEN_ON和ACTION_SCREEN_OFF意图动作.如果触发ACTION_SCREEN_ON,它将启动更新程序服务,否则将停止它.但由于广播接收器的使用寿命,我真的不确定这是否是一个好方法.
在更新程序服务的Runnable中,它由ScheduledExecutorService定期执行并实际执行网络内容,如果屏幕打开,我通过PowerManager.isScreenOn()进行检查.如果是,我执行网络代码,否则不执行.但是什么时候设备处于待机状态?这个代码执行了吗?电池耗尽怎么样?
对于我想做的事情,是否可能采用"最佳实践"方法?我已经阅读了很多关于AlarmManager的信息,它是一个非常强大的工具.您是否可以通过此方式安排任务,只有在显示器打开时才会执行?
谢谢你的帮助.
最诚挚的问候NiThDi
在我的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错误.
在阅读新的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时,此接收器是否会受到新限制的影响?
谢谢.