这是我在android平台上的第一个项目,我对这个环境感到不舒服.
我需要编写一个本机应用程序,它可以从[应用程序的用户ID和运行应用程序实例的pid]中派生应用程序包名称和签名.
我浏览了android应用程序框架,发现PackageManger有能力获取包签名."..getPackageManager().getPackageInfo(packageName,GET_SIGNATURES).."
但是,这显示了在Java应用程序中从包名称获取签名的可能性.正如我所说,我们的输入参数只是应用程序的用户ID /运行实例进程ID.而且我还需要本机客户端而不是java应用程序.
我的问题可以分为以下几点.
有没有办法从本地程序中运行应用程序的uid和pid获取包名?如果无法使用本机客户端,也欢迎使用Java方法.
有没有办法从包名中获取签名?正如我所说,我已经找到了它的java解决方案.
本机客户端是否可以使用Binder服务?这种方法会帮助我解决问题吗?如果是这样,怎么样?
提前致谢!
我从framework-res模块中的styles.xml文件中复制此代码
Run Code Online (Sandbox Code Playgroud)<style name="Theme"> <item name="colorForeground">@android:color/bright_foreground_dark</item> <item name="colorForegroundInverse">@android:color/bright_foreground_dark_inverse</item> <item name="colorBackground">@android:color/background_dark</item>.
Run Code Online (Sandbox Code Playgroud)<style name="Theme.Black"> <item name="android:windowBackground">@android:color/black</item> <item name="android:colorBackground">@android:color/black</item> </style>
如您所见,它们都有一个属性名称,其值为windowBackground.但是formar有一个android:而后者没有.是否真的有必要android:在android框架中编写前缀?
我正在使用Android Studio进行开发(I/O Preview 0.2.3),并且在我开始当前项目后使用了AS.每次打开项目时,我都会Frameworks detected: Android framework is detected in the project Configure在事件日志中收到消息.我可以点击Configure并立即对事情进行排序,但每次打开项目时都会发生.
它并没有真正引起任何问题,更多的是烦恼而不是任何事情.有没有让AS记住这是一个Android项目?
所以这是我的代码.'currentFragment'只是一个跟踪当前显示内容的字段.这是一个本身就是片段的类(所以我有一个显示片段的片段).
private void selectNavBarItem(NavbarItem v)
{
Fragment fragmentToUse = null;
if (v == setpointsNavItem)
{
fragmentToUse = setpointsFragment;
}
else if (v == rapidSetupNavItem)
{
fragmentToUse = rapidSetupFragment;
}
else if (v == outdoorResetNavItem)
{
fragmentToUse = outdoorResetFragment;
}
else if (v == rampDelayNavItem)
{
fragmentToUse = rampDelayFragment;
}
if (fragmentToUse != null)
{
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (currentFragment != null)
{
ft.detach(currentFragment);
}
currentFragment = fragmentToUse;
if (currentFragment.isDetached())
{
ft.attach(currentFragment);
}
else
{
ft.add(R.id.setup_content_holder, …Run Code Online (Sandbox Code Playgroud) 我正在针对API Level 11(3.0)编译Android项目,我有这样的代码:
if (parent instanceof AbsListView) {
checked = ((AbsListView)parent).isItemChecked(position);
}
Run Code Online (Sandbox Code Playgroud)
当我在3.0之前(低于API级别11)设备运行时,我收到此错误:
java.lang.NoSuchMethodError: android.widget.AbsListView.isItemChecked
Run Code Online (Sandbox Code Playgroud)
在AbsListView文档中,isItemChecked声明具有API级别1兼容性,那么为什么我会收到错误?
我刚刚研究了Android框架的代码(v4.1).
我知道invalidate()现在触发的UI消息直接发布到Choreographer而不是UI messageQueue,并且在下一个VSYNC信号到来之前不会执行这些消息.
在执行此post操作之前,ViewRootImpl调用Looper postSyncBarrier()一次以阻止UI MessageQueue,这意味着稍后发送到messagesQueue的消息将不会被执行,直到该块被删除,这在函数之前发生performTraversals().
基于以上理解,
如果
invalidate()在其中的某个地方performTraversals()(例如onDraw()任何视图实例)中调用了另一个,则永远会阻止UI messageQueue?
从实际观察中,我知道这种情况从未发生过.
那么,我哪里错了?
使用android 4.4我发现有些用户正在使用我已实现的notificationListenerService将停止工作.我自己也见过这个.
我从来没有设法在它发生的时候捕获任何日志,但即使进入通知访问部分并关闭和重新开启通知访问也无济于事.
有什么东西可以导致这种情况发生.我不确定我的应用程序是否崩溃并造成这种情况,但即使这样,重启监听器的唯一方法就是重启手机.还有另一种方法可以启动我的应用程序从侦听器服务接收通知吗?
我还得到用户在更新应用版本时遇到此问题的报告.
我已经尝试将日志放入onCreate/onDestroy方法,以查看停止时是否记录了任何内容,但调用了onUnbind,onDestroy,但是没有输入任何这些方法,所以我猜他们一旦停止就不会被调用.
编辑: 在发生这种情况之后我捕获了一个错误报告,并且日志的有趣部分看起来像是:
12-30 15:33:58.731 16194 16194 W ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendOrderedBroadcast:1192 android.app.ContextImpl.sendOrderedBroadcast:1183 android.content.ContextWrapper.sendOrderedBroadcast:390 com.android.settings.applications.ProcessStatsDetail.checkForceStop:314 com.android.settings.applications.ProcessStatsDetail.onResume:108
12-30 15:33:58.741 780 780 V NotificationService: disabling notification listener for user 0: ComponentInfo{com.example.android.navigationdrawerexample/com.example.android.navigationdrawerexample.NotificationListener}
12-30 15:33:58.741 780 780 V NotificationService: disabling notification listener for user 0: ComponentInfo{lovetere.flashme/lovetere.flashme.accessibilityservice.ServicePostKitKat}
12-30 15:33:58.741 780 780 V NotificationService: enabling notification listener for user 0: ComponentInfo{com.example.android.navigationdrawerexample/com.example.android.navigationdrawerexample.NotificationListener}
12-30 15:33:58.741 780 780 V NotificationService: enabling notification listener for user …Run Code Online (Sandbox Code Playgroud) 我想通过编辑AOSP将导航栏(具有系统软键,如背面,主页和菜单,而不是导航抽屉!)放在(右)侧,如下所示.
+-------------------------------------------------+---+
| Status bar (always) | |
+-------------------------------------------------+ N |
| (Layout with background drawable) | a |
| +---------------------------------------------+ | v |
| | Title/Action bar (optional) | | |
| +---------------------------------------------+ | B |
| | Content, vertical extending | | a |
| | | | r |
| +---------------------------------------------+ | |
+-------------------------------------------------+---+
Run Code Online (Sandbox Code Playgroud)
到目前为止,我假设RenderSessionImpl.java是要编辑的文件来完成此任务,因为它呈现的屏幕布局取决于给定的屏幕方向值.
我找到了下一个片段并编辑了方向参数(HORIZONTAL - > VERTICAL),因此它会创建一个水平布局,右侧是导航栏.
if (mNavigationBarOrientation == LinearLayout.HORIZONTAL &&
mNavigationBarSize > 0) {
// system bar
try {
NavigationBar navigationBar …Run Code Online (Sandbox Code Playgroud) 我最近观察到信号 33 崩溃,但找不到对此的解释。该信号通常应用于 system_server 进程,但我找不到有关为什么应用它或哪个进程应用它的任何详细信息。此外,这在 Lollipop 之前的任何版本中都从未见过。那么,从 Lollipop 开始对框架进行了哪些更改?
当android设备开机时,是否可以在不启动主屏幕的情况下加载一个特定的应用程序?
如何进行此更改?
在哪里更改代码
将权限设置为boot_completed可以正常工作,但在加载应用程序之前,主屏幕会显示5秒钟.如何禁用Android在我的应用程序之前显示任何主屏幕启动器
android android-package-managers android-framework android-launcher