我有这种情况
java.lang.NullPointerException:尝试在空对象引用上调用虚方法'boolean android.app.ActivityOptions.isReturning()'
我无法理解为什么EnterActivityOptions.isReturning()在ActivityTransitionState中给我null?
Android最近在其SDK源代码中引入了@SystemApi.看起来像之前的@hide注释一样有效,因为它们也被从SDK jar类中剥离.
应用程序是否有可能以与旧的@hide API不同的方式调用它们.
/**
* Indicates an API is exposed for use by bundled system applications.
* <p>
* These APIs are not guaranteed to remain consistent release-to-release,
* and are not for use by apps linking against the Android SDK.
* </p><p>
* This annotation should only appear on API that is already marked <pre>@hide</pre>.
* </p>
*
* @hide
*/
Run Code Online (Sandbox Code Playgroud) 我在Android应用程序中使用了ObjectAnimator.ofFloat,它不能以相同的方式在每个设备上运行.
MainActivity(扩展活动):
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startAnimation();
}
});
public void startAnimation() {
ImageView aniView = (ImageView) findViewById(R.id.imageView1);
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(aniView, "alpha", 0f);
fadeOut.setDuration(2000);
ObjectAnimator mover = ObjectAnimator.ofFloat(aniView, "translationX", -500f, 0f);
mover.setInterpolator(new TimeInterpolator() {
@Override
public float getInterpolation(float input) {
Log.v("MainActivity", "getInterpolation() " + String.format("%.4f", input));
return input;
}
});
mover.setDuration(2000);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(aniView, "alpha", 0f, 1f);
fadeIn.setDuration(2000);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(mover).with(fadeIn).after(fadeOut);
animatorSet.start();
}
Run Code Online (Sandbox Code Playgroud)
三星Galaxy S4(Android …
Android中的许多内部API都已标记@hide.这到底是做什么的?
另一个答案是它只隐藏了Javadoc的方法,但你可以使用反射来访问它们.
这没有任何意义 - 如果它们只是从Javadoc隐藏,那么你肯定不需要反射来访问它们.事实上,我发现我没有.我仍然可以调用一些@hide方法(也许只是静态方法?),应用程序编译并运行正常,据我所知.我只是得到一个lint错误:
请注意,上面的代码仍然编译好.
我不关心API被更改的可能性,所以我很高兴使用私有API,但有人可以解释这种行为吗?此外,如果有任何方法可以根据具体情况禁用lint,这将是有帮助的.
当我在Nexus 7上对所有应用程序转储所有权限时,我获得了保护级别为0(正常),1(危险),2(签名)的权限(如预期).3(SIGNATURE_OR_SYSTEM)*下没有记录任何内容.
但是也有很多权限,其保护级别设置为'18',一些权限设置为'50'.
我找不到关于这些值代表什么的任何文档.有人知道吗?
*它没有记录3岁以下的任何东西.
这些是记录的:
android.permission.ACCESS_CACHE_FILESYSTEM - 18
android.permission.ACCESS_CHECKIN_PROPERTIES - 18
android.permission.ACCESS_DOWNLOAD_MANAGER - 18
android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED - 18
android.permission.ACCESS_MTP - 18
android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK - 18
android.permission.BACKUP - 18
android.permission.BIND_APPWIDGET - 18
android.permission.BIND_DIRECTORY_SEARCH - 18
android.permission.BIND_KEYGUARD_APPWIDGET - 18
android.permission.BIND_REMOTEVIEWS - 18
android.permission.BIND_WALLPAPER - 18
android.permission.CALL_PRIVILEGED - 18
android.permission.CHANGE_COMPONENT_ENABLED_STATE - 18
android.permission.CHANGE_CONFIGURATION - 18
android.permission.CONNECTIVITY_INTERNAL - 18
android.permission.CONTROL_LOCATION_UPDATES - 18
android.permission.CRYPT_KEEPER - 18
android.permission.DELETE_CACHE_FILES - 18
android.permission.DELETE_PACKAGES - 18
android.permission.DOWNLOAD_CACHE_NON_PURGEABLE - 18
android.permission.GLOBAL_SEARCH - 18
android.permission.INSTALL_LOCATION_PROVIDER - 18
android.permission.INSTALL_PACKAGES - 18
android.permission.MANAGE_USB - …Run Code Online (Sandbox Code Playgroud) 只是玩了一下(我知道View.getRootView()),我手动上升到根,甚至更远.
...
View tv=(View)mv.getParent();
View uv=(View)tv.getParent();
...
Run Code Online (Sandbox Code Playgroud)
实际上我觉得有一点我会遇到一个NullPointerException,但我得到了
03-18 13:07:45.554 13568 13568 E AndroidRuntime: java.lang.ClassCastException: android.view.ViewRootImpl cannot be cast to android.view.View
Run Code Online (Sandbox Code Playgroud)
好的,很好,看起来也很合理.
我还不知道ViewRootImpl,所以我决定接受这个话题并稍微调查一下.
但是,当我这样做的时候
ViewRootImpl wv=(View)vv.getParent();
Run Code Online (Sandbox Code Playgroud)
我得到了(当之无愧)
[javac] /home/jagged/Downloads/android/motog/firsttry/src/tk/wellthen/main.java:285: cannot find symbol
[javac] symbol : class ViewRootImpl
[javac] location: class tk.wellthen.main
[javac] ViewRootImpl wv=(View)vv.getParent();
[javac] ^
Run Code Online (Sandbox Code Playgroud)
来自编译器,但是,当我根据上面的logcat输出完全限定它时,我得到(几乎)相同的错误消息.(我甚至从logcat输出中复制粘贴它以避免拼写错误.)
不用说,试图import android.view.ViewRootImpl.出现了同样的消息,仅针对另一个源代码行.
此外,即使在整个API文档中使用一个单词,Google似乎也没有发现它有用.我认为它主要用于内部,但如果你问我,这是没有理由的.
ViewRootImplstackoverflow.com上有"138"命中(好吧,现在它应该至少为139),但在这种情况下它们完全不相关(如果我没有错过一些特别的东西).
我已经看了一些其他网站,并发现了这个源代码,但是我怀疑将它伪装到SDK中以便探索它会有用吗?
有什么建议吗?提前致谢
我正在查看 android 22 的源代码,将我的代码更改为新的 BLE 扫描,并遇到了 ScanRecord 类。当我打开 ScanRecord 的源代码(sources/android-22/android/bluetooth/le/ScanRecord.java)时,我看到有一个函数 parseFromBytes:
/**
* Parse scan record bytes to {@link ScanRecord}.
* <p>
* The format is defined in Bluetooth 4.1 specification, Volume 3, Part C, Section 11 and 18.
* <p>
* All numerical multi-byte entities and values shall use little-endian <strong>byte</strong>
* order.
*
* @param scanRecord The scan record of Bluetooth LE advertisement and/or scan response.
* @hide
*/
public static ScanRecord parseFromBytes(byte[] scanRecord)
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试在我的代码中使用它,它就找不到该函数。此外,如果我在这里检查 API …
根据链接,我编写了以下代码:
/**
* @hide
* */
public void myMethod() {
// do something
}
Run Code Online (Sandbox Code Playgroud)
当我使用命令生成文档时:
$ javadoc -locale en_US -encoding UTF-8 -charset UTF-8 -d doc xxx.java
Run Code Online (Sandbox Code Playgroud)
医生仍然保留着该myMethod物品。那么如何隐藏呢myMethod?我错过了什么 ?
我收到“无法解析符号”错误,因为 android.jar 缺少一些类。例如:
import android.annotation.MainThread;
import android.annotation.WorkerThread;
import android.annotation.CallSuper;
import android.annotation.DrawableRes;
import android.annotation.IdRes;
import android.annotation.IntDef;
import android.annotation.LayoutRes;
import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.StyleRes;
import android.annotation.SystemApi;
Run Code Online (Sandbox Code Playgroud)
以及许多其他人。
这些类在sources/android-xx 中以.java 文件形式存在,但不在实际的.jar 文件中。
我究竟做错了什么?
我目前正在使用Kotlin开发针对API 27的支持BLE的Android应用.
我试图覆盖其中的一个函数android.bluetooth.BluetoothGatt.可以覆盖许多回调以启用某些BLE事件的处理.
例如,我onConnectionStateChange()以下列方式覆盖:
private val bluetoothGattCallback = object : BluetoothGattCallback() {
override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
/* do stuff */
}
Run Code Online (Sandbox Code Playgroud)
这很好用.
我的问题源于试图覆盖onConnectionUpdated().此回调的定义方式onConnectionStateChange()与BLE API源中的定义相同,那么为什么我不能覆盖它呢?这就是我试图覆盖它的方式(仍在BluetoothGattCallback()对象中):
fun onConnectionUpdated(gatt: BluetoothGatt, interval: Int, latency: Int, timeout: Int, status: Int) {
/* do stuff */
}
Run Code Online (Sandbox Code Playgroud)
编辑:我忘了提到,当我添加
override关键字时,它提供了错误消息:OnConnectionUpdated overrides nothing..
原谅我的天真,我不经常与Kotlin/Java合作,谢谢.
我正在寻找一种方法来识别外部输入设备。
我注意到 [InputDevice] 类的 Android API 有一个名为 [isExternal] 的函数。但是当我尝试使用它时,它告诉我它无法解析方法。我查看了在线 API 参考并注意到该函数不存在。所以我想知道为什么API中的函数而不是在线参考中的函数。
参考:https : //developer.android.com/reference/android/view/InputDevice.html https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/InputDevice .java