小编pan*_*dre的帖子

以编程方式从最近的应用删除应用

我知道可以在清单中声明活动,因为它们被排除在以下位置android:excludeFromRecents:http: //developer.android.com/guide/topics/manifest/activity-element.html#exclude

但是,这不是我想要的,我想知道是否有办法以编程方式从最近的应用程序中删除应用程序

android

49
推荐指数
6
解决办法
5万
查看次数

在后台线程中膨胀视图

我有一个非常简单的问题:

是否还是无法充气视图(不将它添加到布局)在后台线程(例如:在doInBackgroundAsyncTask)?

我知道这是可能的,因为我已经在我的应用程序中以这种方式实现了大多数活动并且从未出现过问题,直到我在Galaxy S上遇到此问题: Android:android.view.InflateException:二进制XML文件行#13:错误在SAMSUNG Galaxy S中膨胀类<未知>

我被告知我不应该Views在后台线程中膨胀,但具体原因是什么,为什么我的aproach在大多数设备中工作但在Galaxy S中没有?

multithreading android thread-safety inflate

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

Android 4.2破坏了我的加密/解密代码,提供的解决方案无效

首先,我已经看到 Android 4.2 在Android 4.2 和提供的解决方案破坏了我的AES加密/解密代码加密错误:

SecureRandom sr = null;
if (android.os.Build.VERSION.SDK_INT >= JELLY_BEAN_4_2) {
    sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
} else {
    sr = SecureRandom.getInstance("SHA1PRNG");
}
Run Code Online (Sandbox Code Playgroud)

对我不起作用,因为,当解码Android 4.2中Android <4.2加密的数据时,我得到:

javax.crypto.BadPaddingException: pad block corrupted
at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(BaseBlockCipher.java:709)
Run Code Online (Sandbox Code Playgroud)

我的代码很简单,直到Android 4.2才开始工作:

public static byte[] encrypt(byte[] data, String seed) throws Exception {

    KeyGenerator keygen = KeyGenerator.getInstance("AES");
    SecureRandom secrand = SecureRandom.getInstance("SHA1PRNG");
    secrand.setSeed(seed.getBytes());
    keygen.init(128, secrand);

    SecretKey seckey = keygen.generateKey();
    byte[] rawKey = seckey.getEncoded();

    SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES");
    Cipher cipher = …
Run Code Online (Sandbox Code Playgroud)

android cryptography bouncycastle

34
推荐指数
4
解决办法
3万
查看次数

Android:将可序列化对象传递给Activity时的ClassNotFoundException

我有一些来自Android市场的崩溃报告日志,类似于:

Exception class: java.lang.ClassNotFoundException

Source method: PathClassLoader.findClass()

java.lang.RuntimeException: Unable to start activity ComponentInfo{my.app.package/my.app.package.MyActivity}: java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable object (name = my.app.package.a.ae)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2833)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2854)
at android.app.ActivityThread.access$2300(ActivityThread.java:136)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2179)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:5068)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable object (name = my.app.package.a.ae)
at android.os.Parcel.readSerializable(Parcel.java:1951)
at android.os.Parcel.readValue(Parcel.java:1822)
at android.os.Parcel.readMapInternal(Parcel.java:2008)
at android.os.Bundle.unparcel(Bundle.java:208)
at android.os.Bundle.getBundle(Bundle.java:1078)
at android.app.Activity.onRestoreInstanceState(Activity.java:861)
at android.app.Activity.performRestoreInstanceState(Activity.java:835)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2811)
... …
Run Code Online (Sandbox Code Playgroud)

java android exception

13
推荐指数
1
解决办法
1万
查看次数

位置:GPS /网络权限:如果可用,则需要

如果可用,我希望我的应用程序访问GPS /网络位置.我不希望Google Play过滤掉没有GPS /网络定位器的设备.

我该怎么做?

目前我的清单上有这个:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
<uses-feature android:name="android.hardware.location" android:required="false" />
Run Code Online (Sandbox Code Playgroud)

但是,我不确定这是否足够,因为http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions-features声明:

-permission ACCESS_COARSE_LOCATION意味着android.hardware.location.networkandroid.hardware.location功能要求

-permission*ACCESS_FINE_LOCATION意味着android.hardware.location.gpsandroid.hardware.location

难道我还必须添加 <uses-feature android:name="android.hardware.location.network" android:required="false" /><uses-feature android:name="android.hardware.location.gps" android:required="false" />

为什么?

应该<uses-feature android:name="android.hardware.location" android:required="false" />不够?

android android-permissions

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

Android:永久保存文件(即使在清除数据/卸载后)

我想知道是否有永久存储少量数据的方法.
永久地,我的意思是即使用户清除应用数据/卸载应用,我也希望数据能够持久存在.
我知道当用户清除应用数据/卸载应用时,共享首选项和数据库将被删除.

我也知道我可以在SD卡上保存东西,但是如果没有安装SD卡/ SD卡的设备怎么办?

我认为最好的选择是将数据保存在设备内部存储器中,但是在清除应用数据/卸载应用程序时,是否可以在不删除数据的情况下执行此操作?

storage android file sd-card

7
推荐指数
1
解决办法
1万
查看次数

BlackBerry:由于UiApplication.getUiApplication().popScreen(),"应用程序没有响应;进程终止"?

我有一个Blackberry应用程序,当在一些具有触摸支持的仿真器中运行时(例如:9500,9520,9530,9550),终止于:

"应用程序没有响应;进程XPTO终止"

使用日志,我发现应用程序似乎停止在我异步发出HTTP请求的类中:类似于:

public class LoadingFullScreen extends FullScreen implements Runnable {

    private Thread actionThread = null;

    protected void onDisplay() {
        actionThread = new Thread(this);
        actionThread.start();
    }

    protected void onUndisplay() {
        if(actionThread != null && actionThread.isAlive()) {
            actionThread.interrupt();
        }
    }

    public void run() {
        //make http requests - this is done successfully

        synchronized(Application.getEventLock()) {
                Screen active = UiApplication.getUiApplication().getActiveScreen();
                if (active instanceof LoadingFullScreen) {
                    Logger.debug("LoadingFullScreen popping screen"); //this appears in logs
                    UiApplication.getUiApplication().popScreen(active);
                    Logger.debug("LoadingFullScreen screen popped"); //this never appears in logs
                }
        } …
Run Code Online (Sandbox Code Playgroud)

blackberry blocking blackberry-simulator

7
推荐指数
1
解决办法
2506
查看次数

Android:android.view.InflateException:二进制XML文件行#13:在SAMSUNG Galaxy S中输出类<unknown>时出错

我有一个奇怪的错误,似乎只发生在三星Galaxy S与Android 2.2(我已经测试了摩托罗拉Milestone 2 Android 2.2/Xperia X10 Android 1.6/Nexus One Android 2.2 /谷歌G1 Android 1.5和1.5仿真器和在这样的设备中,不会发生错误).

完整的堆栈跟踪是:

ERROR/AndroidRuntime(28111): FATAL EXCEPTION: AsyncTask #2
ERROR/AndroidRuntime(28111): java.lang.RuntimeException: An error occured while executing doInBackground()
ERROR/AndroidRuntime(28111):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
ERROR/AndroidRuntime(28111):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
ERROR/AndroidRuntime(28111):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
ERROR/AndroidRuntime(28111):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
ERROR/AndroidRuntime(28111):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
ERROR/AndroidRuntime(28111):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
ERROR/AndroidRuntime(28111):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
ERROR/AndroidRuntime(28111):     at java.lang.Thread.run(Thread.java:1096)
ERROR/AndroidRuntime(28111): Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class <unknown>
ERROR/AndroidRuntime(28111):     at android.view.LayoutInflater.createView(LayoutInflater.java:513)
ERROR/AndroidRuntime(28111):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
ERROR/AndroidRuntime(28111):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
ERROR/AndroidRuntime(28111):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
ERROR/AndroidRuntime(28111):     at …
Run Code Online (Sandbox Code Playgroud)

android exception inflate

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

如何在JellyBean中检查Talkback是否处于活动状态

这个问题询问如何知道Android Talkback是否有效; 直到果冻豆工作.从Android 4.1开始,该步骤不再起作用,因为提到的游标为空.

说完这个,我想问一下是否有办法在Jelly Bean中进行相同的检查.

编辑 我试图搜索TalkBack代码,我在这里找到它.要检查TalkBack是否处于活动状态,我使用以下代码:

Intent screenReaderIntent = new Intent("android.accessibilityservice.AccessibilityService");
screenReaderIntent.addCategory("android.accessibilityservice.category.FEEDBACK_SPOKEN");
List<ResolveInfo> screenReaders = getPackageManager().queryIntentServices(screenReaderIntent, 0);
Cursor cursor = null;
ContentResolver cr = getContentResolver();
for (ResolveInfo screenReader : screenReaders) {
    cursor = cr.query(Uri.parse("content://" + screenReader.serviceInfo.packageName
            + ".providers.StatusProvider"), null, null, null, null);
    //here, cursor is not null, but calling cursor.moveToFirst() returns false, which means the cursor is empty
}
Run Code Online (Sandbox Code Playgroud)

有了这个说,如果光标为空,我们怎么知道TalkBack是否正在运行?

编辑2 在@JoxTraex建议之后,我现在发送广播来查询是否启用了TalkBack:

Intent i = new Intent();
i.setAction("com.google.android.marvin.talkback.ACTION_QUERY_TALKBACK_ENABLED_COMMAND");
sendBroadcast(i);
Run Code Online (Sandbox Code Playgroud)

现在我应该如何收到回复?

我尝试将以下内容添加到清单中,但我的接收方没有收到任何响应:

<receiver android:name="my.package.MyBroadcastReceiver"
android:permission="com.google.android.marvin.talkback.PERMISSION_SEND_INTENT_BROADCAST_COMMANDS_TO_TALKBACK">
<intent-filter> …
Run Code Online (Sandbox Code Playgroud)

android accessibility talkback android-4.1-jelly-bean

4
推荐指数
1
解决办法
5242
查看次数

Android SQLite Journal行为已更改?

我的想法是,SQLite日志仅在有未决操作时才会保留在文件系统中。

但是,在我看来,至少在Android 4.1+中,即使将事务设置为成功/结束,甚至关闭数据库,SQLite日记的正常行为仍保留在文件系统中。

有人对为什么以及何时改变这种行为有想法吗?

sqlite android android-sqlite

4
推荐指数
1
解决办法
485
查看次数

Android模拟器:显示GPU透支

自从我读过这篇文章以来,我一直在尝试创建一个模拟器,我可以使用"Show GPU Overdraw".

我遵循这里那里的提示,但在新工具中,当创建新的AVD时,我发现无法启用GPU仿真.这可能就是为什么我没有在模拟器中看到GPU Overdraw,尽管在模拟器的Developer Settings中有"Show GPU Overdraw"(注意:我通过带有"-gpu on"选项的eclipse运行模拟器)

那么有没有人能够有一个模拟器来显示GPU Overdraw?

android gpu emulation

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

VerifyError:验证者使用Gradle插件3.2.0 + Proguard拒绝了日志com.google.firebase.FirebaseApp类

在我们的项目中,我们一直在成功使用:

  • Firebase(用于FCM)
  • Crashlytics(用于报告崩溃)
  • Proguard(优化版)

一切正常,直到上周我们升级到gradle plugin 3.2.0

在此版本中,如果我们具有以下proguard配置以删除对Log的调用:

-assumenosideeffects class android.util.Log { *; }
Run Code Online (Sandbox Code Playgroud)

在运行应用程序时,我们得到:

java.lang.VerifyError:验证程序拒绝类com.google.firebase.FirebaseApp:void com.google.firebase.FirebaseApp。()无法验证:void com.google.firebase.FirebaseApp。():[0x37]注册v0具有类型未初始化参考:java.lang.Object分配PC:53,但预期参考:java.lang.Object void com.google.firebase.FirebaseApp。(android.content.Context,java.lang.String,com.google.firebase。 b)无法验证:无效com.google.firebase.FirebaseApp。(android.content.Context,java.lang.String,com.google.firebase.b):[0x3C]寄存器v8的类型为未初始化参考:com.google .firebase.internal.a分配PC:58,但预期参考:com.google.firebase.FirebaseApp $ a com.google.firebase.FirebaseApp com.google.firebase.FirebaseApp.a(android.content.Context,com.google。 firebase.b,java.lang.String)无法验证:com.google.firebase.FirebaseApp com.google.firebase.FirebaseApp.a(android.content.Context,com.google.firebase.b,java.lang.String):[0x17]寄存器v1具有未初始化的引用类型:com。 google.firebase.FirebaseApp $ 1分配PC:21,但预期参考:com.google.android.gms.common.api.internal.a $ a(“ com.google.firebase.FirebaseApp”的声明出现在/ data / app / com.example.app-2 / base.apk)`

如果我们删除该配置以剥离Log所有调用,就可以了,就像gradle插件(3.1.4)的先前版本中那样。

有谁知道这可能是什么原因?

crash android verifyerror firebase android-proguard

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