我正在开发的应用程序在第一次安装时有一种奇怪的行为.如果用户第一次正常退出应用程序,它将永远按预期运行.如果用户在安装应用程序后第一次使用主页按钮,它会将应用程序视为应该再次重新启动主屏幕并在旧版本之前启动新版本的活动.
所以手头有两个问题.我似乎无法解决这两个问题.
我没有launchMode将清单文件中的属性定义为任何内容.因此,不应该有任何奇怪的行为.我现在已经尝试launchmode了应用程序的属性,看看我是否能够按照预期的方式运行它,但是这里似乎还有更多的东西,而不仅仅是正确地启动活动.当我按下主页按钮时,应用程序应该第一次关闭自己是没有理由的.
我也没有onUserLeaveHint 在应用程序中使用.通过对项目进行搜索,我必须再次确定.所以似乎根本没有尝试覆盖主页按钮.
即使重新启动手机,主页按钮也会再次正常运行.不确定是什么原因导致初始安装将主页按钮视为从头开始启动应用程序的标志.
一旦用户第一次退出应用程序,问题就会永久解决.关于我应该在哪里看的任何想法?
最近在应用程序中进行了一次搜索,以查看是否它只是因为onUpgrade()SQLite数据库方法的一个组件导致一些奇怪的行为而触发.
@Override
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion) {
}
}
Run Code Online (Sandbox Code Playgroud)
或者在另一个可能触发清单文件更新的位置,如果我将新版本的APK传递给其上有版本的设备已经低于当前版本.但是,在这部分代码中没有任何内容让我相信它应该影响与启动序列相关的任何事情.
清单文件(名称已更改)在下面提供,用于应用程序当前使用的内容.
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="com.android.vending.CHECK_LICENSE"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.VIBRATE" android:required="false"/>
<uses-permission android:name="android.permission.CAMERA" android:required="false"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:allowBackup="false"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
>
<activity android:name=".MyMain"
android:label="@string/app_name_with_version"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity android:name=".StartupActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" …Run Code Online (Sandbox Code Playgroud) 我们可以使用什么(如果有的话)我们可以调用图像上的QR数据发现和提取?
虽然到目前为止有很多帖子引用了ZXing库进行QRCode扫描,还有其他几个帖子要求QRCode扫描备选方案而我没有看到有用的反馈,我想我可能会再次询问社区.如果除了通过功能调用启动活动之外,还有使用库的方法,我还没有看到以这种方式说出它的例子或个人.
它实际上让我感到困惑的是,为什么没有将QRCode功能的本机实现添加到相机库或操作系统内的Google SDK中的类似位置.
调用并要求另一个应用程序(甚至请求下载)不是一个优雅的解决方案,任何用户都不应该屈服于这样的事情.作为开发人员,我们应该能够访问能够从图像或帧中提取QRCode的库,然后我们可以从中删除编码数据.
我注意到,当在JPEG格式的设备上读取相同的照片时,像素值不匹配.它们很接近但不同.转换为PNG文件时,像素值似乎匹配.
这似乎是由于跨设备的(非)压缩算法.无论如何,这就是我想到的.有没有办法读取JPEG文件,以便跨设备从照片中检索相同的像素?我没有在BitmapFactory Options组件中看到一个选项.
当处理跨设备的图像的像素值时,当前应用以下内容来维持大小:
Options options = new Options();
options.inScaled = false;
options.inPreferQualityOverSpeed = true;
Run Code Online (Sandbox Code Playgroud)
目前比较像素与以下只是为了看几个(近似匹配,但不相等):
int[] pixels = new int[bitmapF.getWidth() * bitmapF.getHeight()];
bitmapF.getPixels(pixels, 0, bitmapF.getWidth(), 0, 0, bitmapF.getWidth(), bitmapF.getHeight());
Log.d("pixel entries", "pixels = " + pixels[233] + " - " + pixels[4002] + " - " + pixels[11391]);
Run Code Online (Sandbox Code Playgroud)
注意:如果读取未压缩的同一文件的PNG版本,则值与预期的相同.
例如,三星Galaxy S4和三星Galaxy S5甚至具有与assets文件夹中存储的相同jpeg(运行相同测试活动)不同的像素.
像素[233]例如在s5上是-5205635但在s4上是-5336451.像素[4002]也稍微偏离.但是像素[11391]在这个jpeg图片上的两个设备上是相等的.
我正在开发的应用程序通过 USB 连接与设备成功连接。
此外,它现在会记住来自不同启动的设备,正如以下存储 USB 默认连接的线程中所指出的那样。
但是,这会产生在连接 USB 设备时始终启动 Activity 的不良影响。在不启动应用程序的情况下,我无法记住默认值。在连接上启动应用程序并不是理想的效果。下面的小代码示例是清单当前的样子,以便快速浏览一下存储在内存中的默认 USB 连接,以便将来连接。是否可以在不导致应用程序启动的情况下完成默认值的存储?
<activity
android:name="com.MainScreen"
android:theme="@style/Theme.Default"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
Run Code Online (Sandbox Code Playgroud)
我一直在想,也许有一种类别可以添加到意图过滤器中,将其指定为不可启动的意图。在活动期间监听但由活动处理的东西。然而到目前为止,我还没有找到这个。
更新:
在清单中的服务或接收器内声明 USB 设备连接的意图也是存储连接信息的尝试。但是,只有活动中的 Intent 会记住连接状态,以便在稍后的给定时间点重新连接时不需要询问用户。看起来它的设计目的只是为了保存状态并在连接时启动应用程序。有点奇怪,但没有解决方法可以解决无法启动问题并记住 USB 连接设备的默认连接。
虽然我们可以通过android.os.*组件以编程方式获取物理制造商信息,但我还没有看到有关检查相机详细信息的参考资料。
具体来说,我很好奇是否有一种方法可以检测特定设备中使用的相机传感器,以便可以根据需要进行调整?由于一些三星 Galaxy S6 设备中偶尔会发现不同的相机传感器,我不能只依赖设备本身,最好是根据相机的物理硬件来做。
参考:相机传感器差异
这当然是指在应用程序中正确地校正和检测颜色的外观。
我注意到Google应用程序中的抽屉是可滚动的,但我不能出于某种原因得出如何实现可滚动的DrawerLayout的结论.我尝试使用以下设计范例构造布局文件.
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".mainScreen">
<!-- Layout of Activity -->
</FrameLayout>
<!-- DrawerLayout segment -->
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/drawerLinearLayout"
android:orientation="vertical"
android:layout_width="260dp"
android:layout_height="match_parent"
android:layout_gravity="start|bottom"
android:layout_marginTop="?android:attr/actionBarSize"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#77000000">
<!-- Layout of Drawer -->
</LinearLayout>
</ScrollView>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
但是,无论有没有ScrollView,当抽屉超出屏幕末端时,抽屉只会将底部的物品切掉.我无法启用任何形式的滚动.不确定我缺少什么或需要启用.我们将不胜感激.
DrawerLayout段中的LinearLayout包含不同的样式视图.一个视图仅显示标题,下方有一个分隔符,一个显示带有文本旁边的图像视图,另一个显示带有内置于该行的开关的标题.因此,如果在XML编码布局文件之外完成,则需要考虑多个样式的视图.