在Android 4.4(KitKat)中访问新图库之前,我使用此方法在SD卡上获得了真正的路径:
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
startManagingCursor(cursor);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
Run Code Online (Sandbox Code Playgroud)
现在,Intent.ACTION_GET_CONTENT返回不同的数据:
之前:
content://media/external/images/media/62
Run Code Online (Sandbox Code Playgroud)
现在:
content://com.android.providers.media.documents/document/image:62
Run Code Online (Sandbox Code Playgroud)
我怎么能设法获得SD卡上的真实路径?
我在新的Android KitKat(4.4)中使用半透明操作栏/导航栏时出现问题windowSoftInputMode="adjustResize"
.
Normaly将InputMode更改为adjustResize,应用程序应该在键盘显示时自行调整大小......但是在这里它不会!如果我删除透明效果的行,则调整大小正常.
因此,如果键盘可见,我的ListView就在它下面,我无法访问最后几个项目.(只能手动隐藏键盘)
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="XYZ"
android:versionCode="23"
android:versionName="0.1" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.XYZStyle" >
<activity
android:name="XYZ"
android:label="@string/app_name"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
值-V19/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.XYZStyle" parent="@style/Theme.AppCompat.Light">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
fragment.xml之
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listView_contacts"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:divider="@null"
android:dividerHeight="0dp"
android:drawSelectorOnTop="true"
android:fastScrollAlwaysVisible="true"
android:fastScrollEnabled="true"
android:paddingBottom="@dimen/navigationbar__height" >
</ListView> …
Run Code Online (Sandbox Code Playgroud) android resize statusbar window-soft-input-mode android-4.4-kitkat
当我的活动显示自定义对话框时,如何保持新的沉浸式模式?
我正在使用此代码来维护对话框中的沉浸模式,但是使用此解决方案,当我启动自定义对话框时,NavBar会出现不到一秒钟,然后它就会消失.
这是一个更好地解释问题的视频(当NavBar出现时查看屏幕底部):http://youtu.be/epnd5ghey8g
我该如何避免这种行为?
码
我申请中所有活动的父亲:
public abstract class ImmersiveActivity extends Activity {
@SuppressLint("NewApi")
private void disableImmersiveMode() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_FULLSCREEN
);
}
}
@SuppressLint("NewApi")
private void enableImmersiveMode() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);
}
}
/**
* Set the Immersive mode or not according to its state in the settings:
* enabled or not.
*/
protected void updateSystemUiVisibility() {
// Retrieve …
Run Code Online (Sandbox Code Playgroud) android dialog android-dialog android-activity android-4.4-kitkat
我有一个Android设备充当使用hfp的免提客户端设备.
我能够接听电话,扬声器和麦克风按预期工作.
我的问题是我似乎无法控制音量.
我尝试使用以下代码行来查找正确的流,但它们似乎都不起作用.
我跟踪了从手机发送到类中客户端的音量命令HeadsetClientStateMachine
,在以下链接中的#1822行:来自lolipop的HeadsetClientStateMachine
case EVENT_TYPE_VOLUME_CHANGED:
if (event.valueInt == HeadsetClientHalConstants.VOLUME_TYPE_SPK) {
mAudioManager.setStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO, event.valueInt2, AudioManager.FLAG_SHOW_UI);
mVgsFromStack = true;
Log.d(TAG, "EventVolumeChange STREAM_BLUETOOTH_SCO value: " + event.valueInt2);
}
Run Code Online (Sandbox Code Playgroud)
当我更改手机上的音量时,我确实看到日志显示声音的更新值,这意味着setStreamVolume()
正在调用该方法,但音量不会改变.
有谁知道可能导致这个问题的原因是什么?
编辑:
我仍然在寻找答案,现在正在寻找音频HAL实现.我怀疑HAL和音频驱动程序之间的链接在某种程度上是不正确的...我不太了解低级别的实现,我不确定我应该寻找什么.
我已经将我的sdk更新到最新版本(android 4.4)并启动了模拟器,但现在似乎无法用CTRL + F11旋转屏幕,屏幕更改但所有应用程序都没有更改.我不知道这是否是一个相关的问题,但我可以看到,即使我用menùhw按钮创建了一个新的模拟器,现在所有的应用程序都有溢出按钮.
安装支持Android 4.4(KitKat)的新ADT(22.3.0.v201310242005-887826)后,我不断收到错误,如下所示:
发生了一个内部的错误
在错误列表中,我看到多个"RenderPreview"项,当我点击其中任何一个时,我看到:
发生内部错误.场景创建后,必须调用#init()
在另一台计算机上测试新的ADT时,我看不到出现此错误.这很奇怪.
为什么我会收到这些错误,我该怎么做才能解决?
当我使用Android KitKat尝试我的应用程序时,我在PreferenceActivity中出错.
PreferenceActivity的子类必须覆盖isValidFragment(String)以验证Fragment类是否有效!com.crbin1.labeltodo.ActivityPreference尚未检查片段com.crbin1.labeltodo.StockPreferenceFragment是否有效
在文档中,我找到以下解释
protected boolean isValidFragment(String fragmentName)
在API级别19中添加
子类应覆盖此方法并验证给定片段是否要附加到此活动的有效类型.对于为Android构建的应用程序,默认实现返回true:比KITKAT更早的targetSdkVersion.对于更高版本,它将抛出异常.
我找不到任何解决问题的例子.
java.lang.SecurityException:权限拒绝:从ProcessRecord打开提供程序com.android.providers.media.MediaDocumentsProvider {430b1748 29271:com.xxx/u0a88}(pid = 29271,uid = 10088)需要android.permission.MANAGE_DOCUMENTS或android. permission.MANAGE_DOCUMENTS
我已添加MANAGE_DOCUMENTS
和READ_EXTERNAL_STORAGE
权限,但我仍然收到此错误.违规代码:
public static String getImagePath(HailoDriverApplication app, Uri uri) {
Cursor cursor = null;
if (uri == null) {
return null;
}
try {
cursor = app.getContentResolver().query(uri, new String[] {
MediaStore.Images.Media.DATA
}, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
正如所要求的清单片段:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.x.x.x" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" /> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Android 4.4中使用新的evaluateJavascript方法,但我得到的所有内容都是null结果:
webView1.evaluateJavascript("return \"test\";", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Log is written, but s is always null
}
});
Run Code Online (Sandbox Code Playgroud)
如何将结果返回此方法?
更新:更多信息:
setJavascriptEnabled(true);
return 'test';
,return { test: 'this' }
console.log('test');
正在执行罚款.targetSdkVersion
为19:如果您的应用使用WebView设备: Nexus 7和Nexus 5(股票)
我<input type="file">
在android webview上使用了它.我得到了它的工作感谢这个线程:
WebView中的文件上传
但接受的答案(或任何其他)不再适用于android 4.4 kitkat webview.
有谁知道如何解决它?
它也不适用于目标18.
我看了一些android 4.4源代码,似乎WebChromeClient没有改变,但我认为setWebChromeClient
不再适用于kitkat webview,或者至少不是这个openFileChooser
功能.