我正在使用Android下载管理器下载文件列表.最近我遇到了一份崩溃报告说
Unknown java.lang.IllegalArgumentException: Unknown URL content://downloads/my_downloads
然后,我想通了,原因是因为用户禁用了Android下载管理器.我通过使用以下代码检查下载管理器的包名来检查是否已禁用下载管理器.
int state = this.getPackageManager().getApplicationEnabledSetting("com.android.providers.downloads");
Run Code Online (Sandbox Code Playgroud)
现在,我需要找到一种方法来启用下载管理器,如果它被禁用.我尝试使用Manifest中的权限设置它的启用状态但我一直得到安全异常.
this.getPackageManager().setApplicationEnabledSetting("com.android.providers.downloads", PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
Run Code Online (Sandbox Code Playgroud)
所以我认为它可能无法访问,因为它是一个系统应用程序.(谷歌Play应用程序).
有没有办法将用户重定向到下载管理器应用程序信息视图?让用户启用它?如果无法以编程方式在运行时启用它.
android android-package-managers android-download-manager android-settings
我正在使用Gradle创建一个具有不同风格的构建.它过去一直很好,直到现在,直到我想启用Proguard.我启用minifyEnabled了Release Build,现在我有一个例外说:
" Caused by: org.gradle.internal.UncheckedException: java.io.IOException: The output jar [.../app/build/intermediates/multi-dex/dev/release/componentClasses.jar] must be specified after an input jar, or it will be empty."
有人知道造成这种异常的原因吗?在发布我的应用程序之前,我基本上想要启用ProGuard.这是我的Gradle文件,如下所示.
lintOptions {
abortOnError false
}
dexOptions{
incremental true
javaMaxHeapSize "4g"
}
defaultConfig {
applicationId "..."
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
} …Run Code Online (Sandbox Code Playgroud) android proguard gradle android-gradle-plugin android-proguard
我在视图底部有一个视图寻呼机库和一个圆形页面指示器.我想将页面指示器放在视图寻呼机的前面,如果它可以像在iphone图像库中那样可以使它透明.你知道怎么做吗?

解:
这是解决方案的xml代码.感谢@sanna
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000">
<android.support.v4.view.ViewPager
android:id="@+id/gallery_view"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
<com.viewpagerindicator.CirclePageIndicator
android:id="@+id/indicator"
android:padding="10dip"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentBottom="true"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
这是我画廊的新面貌.

我正在开发一个Android应用程序,它使用从互联网上下载的Tab Host图标,图标大小为30x30.
for(int i = 0; i < titleNames.size(); i++)
{
intent = new Intent().setClass(context, Gallery.class);
sp = tabHost.newTabSpec(titleNames.get(i)).setIndicator(titleNames.get(i), res.getDrawable(R.drawable.icon)).setContent(intent);
tabHost.addTab(sp);
}
Run Code Online (Sandbox Code Playgroud)
如果我使用上面的代码(来自资源的图标)来设置指示器文本和图标,它运行良好,图标适合选项卡小部件.
for(int i = 0; i < titleNames.size(); i++)
{
intent = new Intent().setClass(context, Gallery.class);
sp = tabHost.newTabSpec(titleNames.get(i)).setIndicator(titleNames.get(i), Drawable.createFromPath(path+iconNames.get(i))).setContent(intent);
tabHost.addTab(sp);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用此代码(从互联网及其内部存储器下载的图像)而不是之前的代码,图标看起来很小,甚至两个图标的高度和宽度值都相同.从互联网下载时我不会缩放图标,我将它们保存为PNG.任何人都知道问题是什么?
解:
现在我使用下面的代码,而不是使用我以前的代码向对象主机添加对象,它运行得很好.这两者之间的区别是新的一个是使用一个布局,其中有图像视图和文本视图来指示图标和下面的文本来设置意图的指示.因此,通过这种方式,我可以从图像视图调用方法,使图像适合xml文件中定义的边界.以下是使用View执行此操作的方法.
private void addTab(String labelId, Drawable drawable, Class<?> c) {
tabHost = getTabHost();
intent = new Intent(this, c);
spec = tabHost.newTabSpec("tab" + labelId);
View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);
TextView title = (TextView) …Run Code Online (Sandbox Code Playgroud) 我已将Cordova WebvView作为组件嵌入到我的项目中,除了一件事,一切正常; 当按下后退按钮时,我在LogCat上收到错误消息"接收器未注册!" 我不认为我已经注册了接收器.还有在GitHub上的示例项目在这里.运行此应用程序时,我也得到相同的错误.
我想要做的是,将Cordova WebView嵌入到我的Android项目中并运行一些javascript函数.
这是我的主要活动;
public class MainNativeViewController extends FragmentActivity implements CordovaInterface,
JavaScriptListener {
FragmentTransaction transaction;
RelativeLayout childBrowser;
RelativeLayout dialogBox;
RelativeLayout emailComposer;
private ExecutorService threadPool;
CordovaWebViewFragment cordovaWebViewFragment;
public CordovaWebView cordovaWebView;
public LayoutInflater inflater;
CordovaPlugin mActivityResultCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_container);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
threadPool = Executors.newCachedThreadPool();
cordovaWebView = SingleTonCordovaWebView.getCordovaWebView(this);
cordovaWebView.loadUrl("file:///android_asset/www/invoke_native_view.html");
FragmentManager manager = getSupportFragmentManager();
ListFragment listFragment = new ListFragment();
manager.beginTransaction().add(R.id.fragment_container, listFragment).commit();
}
@Override
public void showFragment(String fragmentName) {
/* …Run Code Online (Sandbox Code Playgroud) 我在Realm数据库中持有一组不同类型的对象.现在我想查询某些类型的对象,包括该对象的所有字段.我在下面编写的方法是获取Object的所有声明字段并迭代字段以检查是否包含给定的查询字符串.
它适用于String字段类型,但抛出java.lang.IllegalArgumentException: Field 'documentCompletionStatus': type mismatch. Was STRING, expected INTEGER.整数值,因为我的搜索查询对象是字符串.我暂时跳过非字符串值作为解决方法,但我很好奇是否可以在所有字段中搜索它.
例如,如果用户想要搜索以对象的"年龄"字段为目标的整数值,我就不能以这种方式工作.
public <T extends RealmObject> List<T> searchDatabase(Class<T> clazz, String searchQuery) {
/* Begin Query */
RealmQuery<T> query = realmDatabase.where(clazz).beginGroup();
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
/* Skip NON-String Values */
if (!fields[i].getType().equals(String.class)) {
continue;
}
if (i == 0) {
query.contains(fields[i].getName(), searchQuery, false);
} else {
query.or().contains(fields[i].getName(), searchQuery, false);
}
}
/* Return All Objects Found */
return query.endGroup().findAll();
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Android Print Framework将WebView的HTML内容保存为PDF.由于Android-L中的WebView有一种渲染WebView内容的新方法,因此建议在创建任何webview之前调用enableSlowWholeDocumentDraw()方法.这将禁用渲染优化,因此WebView将能够呈现整个HTML页面.
以下是将WebView绘制到Canvas中的代码部分.
PdfDocument.Page page = document.startPage(pageInfo);
mWebView.draw(page.getCanvas());
Run Code Online (Sandbox Code Playgroud)
我尝试WebView.enableSlowWholeDocumentDraw()从Application,BaseActivity以及在Fragment中创建WebView之前和之后调用.但这没有帮助.
我尝试通过将Layer Type设置为SOFTWARE和HARDWARE来启用/禁用硬件加速,但这也无济于事.我仍然无法绘制整个WebView.只有可见部分将被绘制到画布.
有人注意到这种行为吗?有没有解决方案或这是一个Bug?
编辑
事实证明,它不是关于WebView.enableSlowWholeDocumentDraw(),我们仍在讨论这个问题.这是错误报告.以下是重现问题的示例应用程序.
由于TabActivity已弃用,我需要找到一种方法来使用Fragments.在我知道它是如何工作之前我曾经使用过Fragments但是我需要一个指南来创建带有FragmentActivities的标签主机.我在互联网上找到了几个例子,它们都是关于将片段放入选项卡的容器中.
我想要的是为每个选项卡添加FragmentActivities.因为在我的应用程序中,我将使用4个选项卡,每个选项卡中都包含非常复杂的内容.因此,我需要为每个选项卡设置FragmentActivity来管理我将放在单独容器中的每个选项卡下的片段.
解:
在回答并在互联网上搜索后,我最终得到了一个解决方案.根据我发现的解决方案,我会在tab主机下的每个选项卡中跟踪分离堆栈中的Fragments.这是我的GitHub存储库,我为这个问题创建了一个小样本应用程序.
android android-tabhost android-fragments android-fragmentactivity
由于TabActivity已被弃用,我尝试将其替换为已在开发者android网站中提及的Fragments.但是你们已经知道有一个关于用片段替换制表符的问题,因为只有一个活动,即Fragment Activity,每个片段都没有后向堆栈,你可以在其他SO问题中看到开发人员说你需要管理自己的自定义后台堆栈作为解决方案.
我已经创建并实现了我自己的自定义后台堆栈,如下所示,它工作正常我可以跟踪每个选项卡中的每个片段.
TAB1
Fragment1 > Fragment2 > Fragment3
Run Code Online (Sandbox Code Playgroud)
TAB2
Fragment5 > Fragment6
Run Code Online (Sandbox Code Playgroud)
根据上面的导航,如果我从Fragment1导航到片段3,之后如果我将选项卡更改为Tab2并返回到Tab1,我仍然可以看到Fragment3,我甚至可以使用我的自定义后台堆栈导航回Fragment1.
但问题是,当我回到Tab1并看到Fragment3时,Fragment3被重新创建,在我将选项卡更改为Tab2之前,我无法看到更改.
这是我的自定义后台堆栈;
public static HashMap<String, Stack<Fragment>> customBackStack;
public static Stack<Fragment> simpleStack;
public static Stack<Fragment> contactStack;
public static Stack<Fragment> customStack;
public static Stack<Fragment> throttleStack;
public static Stack<Fragment> homeStack;
customBackStack = new HashMap<String, Stack<Fragment>>();
homeStack = new Stack<Fragment>();
simpleStack = new Stack<Fragment>();
contactStack = new Stack<Fragment>();
customStack = new Stack<Fragment>();
throttleStack = new Stack<Fragment>();
customBackStack.put("home", homeStack);
customBackStack.put("simple", simpleStack);
customBackStack.put("contacts", contactStack);
customBackStack.put("custom", customStack);
customBackStack.put("throttle", throttleStack);
Run Code Online (Sandbox Code Playgroud)
这里是onTabChanged方法;
public void onTabChanged(String …Run Code Online (Sandbox Code Playgroud) 由于某些技术原因,我无法使用Android File Picker将文件及其内容存入我的应用程序.这就是为什么我想出了一个查询意图并在我自己的UI上处理结果的解决方案.
以下是我获取应用程序列表的方法 Intent.ACTION_GET_CONTENT
/* Create a new Intent to Read a File */
Intent documentIntent = new Intent(Intent.ACTION_GET_CONTENT);
documentIntent.setType((action == ACTION_SELECT_FILE) ? "*/*" : "image/*");
/* Query for Applications to see which are available */
List<ResolveInfo> appList = getActivity().getPackageManager().queryIntentActivities(documentIntent, PackageManager.MATCH_DEFAULT_ONLY);
Run Code Online (Sandbox Code Playgroud)
这很好,并列出了可以处理我的请求的应用程序.
但我工作的Android for Work,当我执行上面的代码,我只得到可用的应用程序列表中的工作资料,预计.
但是从上面的代码返回的结果之一是"切换到个人",其中列出了安装在Android文件选择器中的个人帐户中的应用程序.
所以问题是,我怎样才能获得相同的行为?如何从个人资料中查询意图活动?
android android-intent android-package-managers android-for-work
我的应用程序将包含自定义日历,根据此日历,用户可以创建事件和提醒.
事实是,是否可以在Android中创建自定义日历?
(我的意思是我想在我的日历中创建活动,这些活动不会出现在Android的主日历中.最好用户也可以将这些活动添加到Android的日历中.)
所以我的第一个问题是,是否有可能创建这种应用程序?
2-)我是否需要为此项目使用SQL lite?或Android存储这些信息?因为我想让用户能够编辑和删除事件和提醒.
任何教程或开源项目都会有所帮助.
我创建一个列表视图,并在我的自定义对话框中实现该列表视图.该列表视图使用数组适配器,在我的数组适配器中,我使用自己的布局和所需的颜色.代码如下.
listView = new ListView(context);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(Loged.this,
R.layout.my_spinner_layout, items);
listView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
在这里,单击我的列表项的监听器工作正常.
问题现在开始了.我的自定义警报对话框中需要一个列表视图,每行包含一个单选按钮.我使用相同的方法.这是我的代码.
listView = new ListView(context);
ArrayAdapter<String>adapter = new ArrayAdapter<String>(context,R.layout.my_single_choice_layout, choice);
listView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
这里可以同时检查所有radioButtons.我的听众工作不正常
my_spinner_layout_xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
style="@style/ListItemTextColor"
/>
Run Code Online (Sandbox Code Playgroud)
和my_single_choice_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:id="@+id/my_choice_radio"
android:layout_height="match_parent"
android:button="@null"
android:drawableRight="@android:drawable/btn_radio"
android:text="Option"
style="@style/ListItemTextColor" >
</RadioButton>
Run Code Online (Sandbox Code Playgroud) 编辑:
我有一个应用程序写入SharedPreferences像这样:
Context otherAppsContext = null;
try {
otherAppsContext = createPackageContext("AfroKeyboard.com.rob", Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
}
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("PREFS_PRIVATE", Context.MODE_WORLD_READABLE);
Editor prefsPrivateEditor = sharedPreferences.edit();
prefsPrivateEditor.putString("layout02", jString);
prefsPrivateEditor.putString("layout02name", "Russian Layout");
prefsPrivateEditor.commit();
Run Code Online (Sandbox Code Playgroud)
和另一个必须从他们读取的应用程序
Context otherAppsContext = null;
try {
otherAppsContext = createPackageContext("AfroKeyboard.com.rob", Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
}
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("PREFS_PRIVATE", Context.MODE_WORLD_READABLE);
Log.e( "name2" , "name2: "+sharedPreferences.getString("layout02name", "") );
Run Code Online (Sandbox Code Playgroud)
但它返回空.
您认为可能是什么问题?
谢谢!