- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在构建一个不会通过 Marketplace 的私有(private)应用程序。结果,我需要拉取当前版本应用(不是平台)信息,并向服务器查询是否有更新。它在模拟器上运行良好,但是当我在我的 Droid X 上安装签名的 APK 时,它返回 null。这是代码:
PackageInfo pInfo = null;
try {
pInfo = getPackageManager().getPackageInfo("com.rubiconproject.expenses",
PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
return;
}
String postUrl = DbAdapter.REMOTE_DB +
"/application/active-version/platform/android/version/" +
pInfo.versionCode + "." + pInfo.versionName;
编辑:
我在下面编写了一个小得多的应用程序来显示我的问题 (TestingActivity.java):
package com.rubiconproject.testing;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.widget.TextView;
public class TestingActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PackageInfo pInfo = null;
try {
pInfo = getPackageManager().getPackageInfo(
"com.rubiconproject.testing", PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
return;
}
TextView tt = (TextView)findViewById(R.id.textView1);
tt.setText(pInfo.versionCode);
TextView tt2 = (TextView)findViewById(R.id.textView2);
tt2.setText(pInfo.versionName);
}
}
和 list :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rubiconproject.testing"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="9" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".TestingActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
adb logcat 显示:
E/AndroidRuntime( 335): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rubiconproject.testing/com.rubiconproject.testing.TestingActivity}: java.lang.NullPointerException
E/AndroidRuntime( 335): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
E/AndroidRuntime( 335): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
E/AndroidRuntime( 335): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/AndroidRuntime( 335): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
E/AndroidRuntime( 335): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 335): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 335): at android.app.ActivityThread.main(ActivityThread.java:3647)
E/AndroidRuntime( 335): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 335): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 335): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime( 335): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime( 335): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 335): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 335): at com.rubiconproject.testing.TestingActivity.onCreate(TestingActivity.java:26)
E/AndroidRuntime( 335): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 335): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
E/AndroidRuntime( 335): ... 11 more
第 26 行对应于:
tt.setText(pInfo.versionCode);
有人知道为什么会这样吗?
最佳答案
您的 manifest.xml 是否包含 android:versionCode 和 androd:versionName 属性?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.package.name"
android:versionCode="2"
android:versionName="1.1">
<application android:icon="@drawable/icon" android:label="@string/app_name">
...
</application>
</manifest>
关于android-emulator - PackageInfo versionCode 和 versionName 在手机上为空,但在模拟器上有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728906/
我正在为 Android 编写一个应用程序,其中获取应用程序的标签(实际名称)非常慢。特别是这段代码的表现非常糟糕: packageInfo.loadLabel(pm); 只是给你一些指标。在安装了
我的应用使用 PackageInfo 的 versionName 来确定当前版本。 我正在尝试测试依赖于该数据的一段代码(使用 JUnit),但 Robolectric 将 versionName 设
为此花了一整天,但无法正常工作。 我正在尝试创建一个应用程序抽屉。我想获取当前已安装应用程序的列表,然后将其放入 GridLayout。 当我尝试从扩展我的 MainActivity 的类调用 get
为什么这个值中有多个签名?这些值是包的公钥吗? 我可以使用这个签名来唯一标识一个包,而不是读取 META-INF 下的文件,或者计算整个 APK 文件的 MD5 吗? 最佳答案 根据@hackbod,
有没有办法从 packageinfo 运行一个 intent?我一直在寻找,但没有找到。 我试过了 Intent i = new Intent(); i.setAction(Intent.ACTION
如果我将 Manifest.xml 的版本代码从 1 更改为 2,packageInfo.versionCode 总是返回 1。我想返回2,我应该在哪里修复?顺便说一下,在这种情况下,packageI
我正在尝试枚举所有已安装包使用的所有权限,但是当我检查 requestedPermissions我安装的每个软件包的属性始终为空。 最佳答案 我只需要将 PackageManager.GET_PERM
我有几个关于 ApplicationInfo 和 PackageInfo 类的一般性问题。他们在这里: 谁能描述一下 ApplicationInfo 和包信息? 它们如何相互关联? 在哪些情况下使用
我正在尝试获取我的应用程序拥有的权限列表以及设备上安装的应用程序列表。我熟悉android中的ApplicationInfo和PackageInfo,但找不到适用于ios swift的任何内容 最佳答
我通过比较包名和 PackageInfo 的签名在我的 android 应用程序中实现了对不兼容应用程序的验证。我通过以下方式获取有关已安装软件包的信息: val packages = context
我正在相互检查包签名以确定它们是否不兼容(针对不同的 keystore 编译)。我注意到 PackageInfo.signatures 几乎总是一个包含单个条目的集合,这对我来说很有意义。我使用调试或
List pkginfoList = getPackageManager() .getInstalledPackages(0); 如何对 PackageInfo 进行排
对于手机上安装的所有应用程序,我需要访问: 姓名 图标 可以安装应用程序的 google play url 我查看了 ApplicationInfo,但它似乎没有向我提供此信息。我听说过 Packag
PackageManager.GET_SIGNATURES 的文档说“此常量在 API 级别 28 中已弃用。请改用 GET_SIGNING_CERTIFICATES”。 不幸的是,它并不安全,很容易
在谷歌上玩这个错误 FATAL EXCEPTION: main Process: com.sonymobile.scan3d, PID: 13877 java.lang.NoSuchMethodErr
我正在构建一个不会通过 Marketplace 的私有(private)应用程序。结果,我需要拉取当前版本应用(不是平台)信息,并向服务器查询是否有更新。它在模拟器上运行良好,但是当我在我的 Droi
我刚刚将应用的 compileSdkVersion 升级到 28 (Pie)。 我收到编译警告: warning: [deprecation] versionCode in PackageInfo h
我最近将我的 android studio 更新到 2.2 预览版。当我使用 PackageInfo.versionName 请求 versionName 时,它返回 INSTANT_RUN 而不
我得到一个 android.app.ActivityThread$PackageInfo$ServiceDispatcher.doConnected(ActivityThread.java:1012)
我是一名优秀的程序员,十分优秀!