小编Eri*_*Kok的帖子

自定义SSL处理在Android 2.2 FroYo上停止运行

对于我的应用程序Transdroid,我通过HTTP连接到远程服务器,并可选择通过HTTPS安全地连接.对于与HttpClient的这些HTTPS连接,我使用自定义SSL套接字工厂实现来确保自签名证书正常工作.基本上,我接受一切,并忽略任何证书的每一次检查.

这已经有一段时间了,但它不再适用于Android 2.2 FroYo.尝试连接时,它将返回一个异常:

java.io.IOException: SSL handshake failure: I/O error during system call, Broken pipe
Run Code Online (Sandbox Code Playgroud)

以下是我初始化HttpClient的方法:

    SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme("http", new PlainSocketFactory(), 80));
    registry.register(new Scheme("https", (trustAll ? new FakeSocketFactory() : SSLSocketFactory.getSocketFactory()), 443));
    client = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams, registry), httpParams);
Run Code Online (Sandbox Code Playgroud)

我使用了FakeSocketFactory和FakeTrustManager,其源代码可以在这里找到.

同样,我不明白为什么它突然停止工作,甚至错误'破管'的意思.我在Twitter上看到过Seesmic和Twidroid在FroYo上启用SSL时失败的消息,但我不确定它是否相关.

感谢您的任何指示/帮助!

ssl android android-2.2-froyo

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

位图未绘制消除锯齿

我有一个习惯View,总是Bitmap在一定的轮换.我覆盖了该onDraw方法,旋转Canvas并使用消除锯齿绘制位图Paint.

public RotatedImageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    someBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.placeholder);
}

@Override
protected void onDraw(Canvas canvas) {

    // Save and rotate canvas
    canvas.save();
    canvas.rotate(3F, getWidth() / 2, getHeight());

    // Draw the icon
    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
    canvas.drawBitmap(someBitmap, 0, 0, p);
    canvas.drawRoundRect(new RectF(75, 50, 225, 200), 10, 10, p);

    // All done; restore canvas
    canvas.restore();
}
Run Code Online (Sandbox Code Playgroud)

但是,我总是在Bitmap上出现锯齿状边缘.请注意,roudned矩形可以很好地消除锯齿边缘.此外,当我应用p.setFilterBitmap(true);此工作(位图表面被过滤/平滑)正确.我错过了什么吗?

照片上没有抗锯齿功能

这是一个最小的Android项目,其中一个屏幕的隔离示例显示了绘制从资源加载的非抗锯齿Bitmap的视图:https://bitbucket.org/erickok/antialiastest

更新: …

android android-custom-view android-canvas

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

从捕获的DownloadManager意图中检索文件路径

从Android 4.2开始,如果用户在浏览器中下载某个文件,则使用DownloadManager.如果用户单击"下载完成"通知,则始终启动Intent.在Android 4.2之前,意图用于在内容中包含下载文件的路径,例如:

intent.getData()
Run Code Online (Sandbox Code Playgroud)

会返回一个字符串,如file:///storage/emulated/0/Download/some_file.ext.但是,自Android 4.2以来,下载管理器使用一种content方案进行广播和意图,例如content://downloads/all_downloads/2334.

如何检索下载文件的本地文件路径?

我尝试过以下方法:

public static String getRealPathFromURI(Uri contentUri, Activity activity) {
    DownloadManager downloadManager = (DownloadManager) activity.getSystemService(Activity.DOWNLOAD_SERVICE);
    String[] contentParts = contentUri.getEncodedPath().split("/");
    Cursor q = downloadManager.query(new DownloadManager.Query().setFilterById(Integer.parseInt(contentParts[contentParts.length - 1])));
    if (q == null) {
        // Download no longer exists
        return null;
    }
    q.moveToFirst();
    return q.getString(q.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
}
Run Code Online (Sandbox Code Playgroud)

但是游标永远不会返回任何行(q.getCount() == 0因此,最后一个return语句会抛出异常).此外,通过从Uri解析下载文件ID的hack似乎很奇怪.

更新:我也尝试过:

input = getActivity().getContentResolver().openInputStream(contentUri);
Run Code Online (Sandbox Code Playgroud)

但这会返回一个错误说明

权限拒绝:阅读com.android.providers.downloads.DownloadProvider uri content:// downloads/all_downloads/2334 from pid = 30950,uid = 10064需要android.permission.ACCESS_ALL_DOWNLOADS或grantUriPermission()

很明显,我无法访问下载(因为我的应用程序没有启动它们 - …

android download-manager android-intent

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

向后兼容的BackupAgent

我正在考虑使用自Android 2.2以来可用的新备份API,但需要保持向后兼容性(准确地说是1.5).

文档说明:

备份服务和必须使用的API仅在运行API Level 8(Android 2.2)或更高版本的设备上可用,因此您还应将android:minSdkVersion属性设置为"8".但是,如果在应用程序中实现正确的向后兼容性,则可以为运行API级别8或更高级别的设备支持此功能,同时保持与旧设备兼容.

我确实targetSdkVersion使用级别3 构建了8 级minSdkVersion并尝试使用包装类(使用反射)来克服如果实现扩展不存在的类的类,应用程序将无法运行的问题.

问题在于:由于我们自己没有对BackupHelper班级进行实际调用,因此如果班级确实存在,我们就无法提前检查.(正如使用checkAvailable()方法在Android向后兼容性文档中所解释的那样.)因此,将实例化类并将其强制转换为BackupAgent.但是,由于我们使用反射,它实际上不会覆盖BackupAgent,并且在请求备份时在运行时发生异常:

java.lang.RuntimeException: Unable to create BackupAgent org.transdroid.service.BackupAgent: java.lang.ClassCastException: org.transdroid.service.BackupAgent
Run Code Online (Sandbox Code Playgroud)

以下是我向后兼容的方法BackupAgent:http://code.google.com/p/transdroid/source/browse/#svn/trunk/src/org/transdroid/service其中BackupAgent.java是'常规'BackupAgentHelper -extending类和BackupAgentHelperWrapper是基于反射的包装类.

有人成功实现了BackupAgent向后兼容性吗?

reflection android backwards-compatibility android-backup-service

6
推荐指数
2
解决办法
2662
查看次数