Articles of 向后兼容

Android后向代码兼容性

我正在开发一个使用的应用程序 android.hardware.Camera.parameters.getSupportedPictureSizes() 这只适用于SDK版本8,我想与SDK 4兼容,所以我这样做了: if(Build.VERSION.SDK_INT> = 8){…} 但是在仿真器上,它试图检查对这个函数的引用,并且失败: 02-02 11:20:10.930:错误/ dalvikvm(1841):无法find方法android.hardware.Camera $ Parameters.getSupportedPictureSizes,从方法com.test.demo.CameraCustom.takeAPicture引用 任何关于如何解决这个向后兼容性问题的想法? 我已经尝试使用surfaceChanged内的这段代码的墨水位。 显然,代码可以直接运行而不需要调用: try{ windowmanager_defaultdisplay_Rotation = getWindowManager().getDefaultDisplay().getClass().getMethod("getRotation"); Log.v(MainMenu.TAG, "getRotation exist"); }catch(Exception e){ Log.v(MainMenu.TAG, "getRotation dont exist"); } try{ windowmanager_defaultdisplay_Rotation.invoke(null, null); Log.v(MainMenu.TAG, "getRotation invoking ok, rotation "); }catch(Exception e){ Log.v(MainMenu.TAG, "exception invoking getRotation "+e.toString()); } 我得到“getRotation存在”,然后“exception调用getRotation java.lang.NullPointerException。 任何想法?

在向后兼容的代码中有这么多被弃用的方法可以吗?

我正在编写一个针对API级别15的Android应用程序,但我也希望使用较旧的API级别(min-sdk 7)保持向后兼容性。 我将通过根据当前API级别决定使用哪个代码(如下所示)来达到这一目的。 我想这是一个很好的方法,我只想问是否有这么多不赞成使用的方法(如display.getWidth() ),因为API级别8和15之间有相当多的变化。如果是这样在这种情况下,是否使用@SuppressWarning("deprecation") ? 如果API级别<= 8和> = 9,使用多个APK不会更好吗? (即使这不是由developer.android.com推荐。 Display display = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); Point screenSize = new Point(); // calculate the width float width; if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { display.getSize(screenSize); width = screenSize.x; } else { width = display.getWidth(); } 谢谢!

Android:使用ActionBarSherlock库

我想创build一个针对旧版Android平台的应用程序(> = 2.x)。 我发现了ActionBarSherlock ,允许以ICS风格构build动作条。 但是,当我阅读它的FAQ时 ,我发现我必须使用API​​级别14(4.0:ICS)来编译我的项目,并将我的清单(3.0:Honeycomb)中的API级别11作为目标。 所以,我的问题是:我如何使用ActionBarSherlock来定位2.x版本?

VerifyError,或使用overridePendingTransition维护兼容性?

我有一个应用程序使用overridePendingTransition从一个活动转换到另一个做一些自定义animation。 这是在Android 2.0中提供的,但我想让应用程序在Android 1.6上运行。 我想如果我只是检查了android.os.Build.VERSION.SDK_INT> android.os.Build.VERSION_CODES.DONUT,如果不是,不要做overridePendingTransition。 但是,我得到一个VerifyError,我认为是由此引起的:VFY:无法parsing虚拟方法346:../../Login:overridePendingTransition(II)V 是否有可能有条件地使用基于SDK版本的新function?

Inflate在XML中定义的ActionBarSherlock菜单

应该很简单,但可能不会。 在Android 3.0+中使用操作栏时,您可以select使用XML或代码定义菜单项。 我更喜欢在xml中对它们进行编码,因为操作栏感觉更多基于UI的function。 在平均一天,你会用这个xml到一个菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { // Menu is defined inside 'res/menu/…xml getMenuInflater().inflate(R.menu.activity_home, menu); return true; } 你的XML文件看起来像这样 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/menu_settings"/> <item android:id="@+id/menu_item_menu" android:icon="@drawable/menu_off_128" android:showAsAction="ifRoom|withText" android:title="@string/inbox_string"/> <item android:id="@+id/menu_item_gallery" android:icon="@drawable/gallery_off_128" android:showAsAction="ifRoom|withText" android:title="@string/gallery_string"/> <item android:id="@+id/menu_item_inbox" android:icon="@drawable/inbox_off_128" android:showAsAction="ifRoom|withText" android:title="@string/inbox_string"/> <item android:id="@+id/menu_item_contact" android:icon="@drawable/phone_off_128" android:showAsAction="ifRoom|withText" android:title="@string/contact_string"/> </menu> 现在,我面临着向后兼容ActionBarsherlock似乎是最令人愉快的使用和stream行的问题。 所以我用actionbarsherlock尝试了上面的内容,遗憾的是编译时间问题。 也就是说,inflater返回的Menu类是从“Android.view.menu”而不是“com.actionbarsherlock.menu”。 […]

如何使Android直接回复通知function在Android N之前的设备中工作?

我正试图在我的应用程序中实现Android直接回复通知。 我已经成功地在Android N模拟器中实现了它 。 但它不适用于棉花糖设备。 当我点击通知中的操作button时,回复edittext不会显示在Android N以下的设备中。我知道此function将在Android N设备之前工作,因为它在WhatsApp中可用。 我的问题是如何使它在Android N设备之前工作? 我在这里分享我的代码。 任何帮助将是伟大的。 谢谢。 主要活动 import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.RemoteInput; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends AppCompatActivity { // Key for the string that's delivered in the […]

如何创build一个与姜饼和Froyo的ICS UI的Android应用程序?

如何像Hacker News beta这样的应用程序在他们的应用程序上使用Ice Cream Sandwich 4.0 UI,并且在2.3 Gingerbread和2.2 Froyo上没有任何问题的情况下工作? 我想创build应该在4.0上工作的应用程序,并且具有这样的向后兼容性,但是怎么做呢?

FILL_PARENT和MATCH_PARENT

现在我在整个应用程序中都使用MATCH_PARENT。 我决定让应用程序可用于Android 2.1用户,但MATCH_PARENT直到Android 2.2才被引入 如果我希望我的应用程序在Android版本是2.2或更高版本时使用MATCH_PARENT,但是如果它是2.1(或稍后决定稍后打开它)时使用FILL_PARENT,我该如何去做呢?

将backgroundtint应用于API 19的可绘制背景

背景颜色正确地应用在API 23上,但不是在API 19上。我怎样才能得到可绘制的API 19和以下? <Button android:layout_width="40dp" android:layout_height="40dp" android:id="@+id/AbResetBtn" android:background="@android:drawable/stat_notify_sync" android:backgroundTint="@color/button_material_light" /> 当然我的Activity扩展AppCompatActivity。

Android应用程序向后兼容?

目前我正在做一些iPhone / Android的开发,我很好奇,如果我要构build一个针对Android 2.2的应用程序,并在Android Marketplace上发布它,是否可以使用旧版本操作系统,如1.6? 如果这样的用户试图运行应用程序会发生什么? 他们会被提示更新他们的操作系统或只是收到错误信息? 多谢你们。