小编Gra*_*eme的帖子

JNI - 将表示基本Java对象(布尔值)的jobject转换为本机基本类型(bool)

我想我已经设法将大部分问题都纳入了这个问题的标题!

我在我的本机C++代码中从Java中撤回一个Object:

jobject valueObject = env->CallObjectMethod(hashMapObject, hashMapGetMID, keyObject);
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法检查返回对象是否是本机类型之一:

jclass boolClass = env->FindClass("java/lang/Boolean");
if(env->IsInstanceOf(valueObject, boolClass) == JNI_TRUE) { }
Run Code Online (Sandbox Code Playgroud)

所以,我现在有一个jobject,我知道它是一个布尔值(注意大写字母B) - 问题是,最有效的方法是什么(考虑到我已经在我的本机代码中有了jobject)将它转换为a bool.类型转换不起作用,这是有道理的.

虽然上面的例子是一个布尔我也想转换Character-> char,Short-> short,Integer-> int,Float-> float,Double-> double.

(一旦我实现了它,我将发布一个回答这个做Boolean.booleanValue())

performance java-native-interface android-ndk

5
推荐指数
1
解决办法
5994
查看次数

GLSurfaceView 生命周期方法 onPause() 和 onResume()

我正在尝试在我的应用程序中正确使用 OpenGL,但在使用 Lifecycle Methods:onPause()onResume().

文件指出:

活动生命周期

当活动暂停和恢复时,必须通知 GLSurfaceView。GLSurfaceView 客户端需要在活动暂停时调用 onPause(),在活动恢复时调用 onResume()。这些调用允许 GLSurfaceView 暂停和恢复渲染线程,还允许 GLSurfaceView 释放和重新创建 OpenGL 显示。

所有我的第一略有困惑,onPause()onResume()为整个Android的,生命周期事件,其余为所谓的由系统(活动/片段)。在这里,从描述(包括onPause()onResume() 中的详细描述)来看,它们似乎必须由开发人员手动调用。

我一直在使用,GLSurfaceView 没有打电话onPause()onResume()没有发现问题。但是,为了打球(并减少恢复活动时奇怪行为的可能嫌疑人),我试图按照文档中的描述将它们添加进来。

然而,似乎使用 onResume() 会导致NullPointerException抛出 a:

07-23 13:20:08.570: E/AndroidRuntime(20777): Caused by: java.lang.NullPointerException
07-23 13:20:08.570: E/AndroidRuntime(20777):    at android.opengl.GLSurfaceView.onResume(GLSurfaceView.java:544)
07-23 13:20:08.570: E/AndroidRuntime(20777):    at com.ActivityNameHere.onResume(ActivityNameHere.java:151)
Run Code Online (Sandbox Code Playgroud)

是否有一个步骤我失踪注册ActivityView

android opengl-es glsurfaceview

5
推荐指数
1
解决办法
4523
查看次数

前景服务在通知点击时被杀死

在Android 4.4.2中,单击我的Foreground Service通知会终止我的进程.

在较旧的设备上(Samsuing Tab 2运行4.2.2),我可以从最近的任务中删除活动,但仍然可以Service在后台运行.然后,当我点击Notification我的应用程序Activity时,很高兴再次开始.

但是,一旦我点击运行4.4.2的Nexus 7上的通知,我的进程就会被终止(直到点击在后台运行得很快).本PendingIntent似乎并没有在各消防,或至少,它不打的第一行BroadcastReceiver:

05-21 16:17:38.939: I/ActivityManager(522): Killing 2268:com.test.student/u0a242 (adj 0): remove task
Run Code Online (Sandbox Code Playgroud)

我已经通过运行这个答案,并且使用命令dumpsys activity proccesses我,我的服务确认在前台运行正常.

那么,点击这个杀死我的进程的通知又是什么呢?

将服务移至前台所涉及的代码如下:

服务:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i("NativeWrappingService", "Starting Service...");
    startForeground(NotificationIcon.NOTIFICATION_STUDENT, NotificationManager.getStudentIcon(this).getNotification());    
    return super.onStartCommand(intent, flags, startId);
}
Run Code Online (Sandbox Code Playgroud)

NotificationIcon :( getStudentIcon(this).getNotification())

public Notification getNotification() {
    Builder mBuilder = new Builder(mContext);

    if(mSmallIcon   != -1)      mBuilder.setSmallIcon(mSmallIcon);
    if(mLargeIcon   != null)    mBuilder.setLargeIcon(mLargeIcon); …
Run Code Online (Sandbox Code Playgroud)

service android android-notifications foreground-service

5
推荐指数
1
解决办法
2975
查看次数

putFragment() - 片段 x 当前不在 FragmentManager 中

上面的标题已经被问了很多次,但答案似乎FragmentStatePagerAdapter与我的问题无关。我putFragment(Bundle, String, Fragment)直接用这个方法。

Android文档putFragment(Bundle, String, Fragment)

Put a reference to a fragment in a Bundle. This Bundle can be persisted as saved state, and when later restoring getFragment(Bundle, String) will return the current instance of the same fragment.

Parameters
* bundle        The bundle in which to put the fragment reference.
* key           The name of the entry in the bundle.
* fragment  The Fragment whose reference is to be stored.
Run Code Online (Sandbox Code Playgroud)

但是下面的代码会抛出异常:

Bundle …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragment-backstack

5
推荐指数
1
解决办法
2335
查看次数

切换方向错误:片段错误 - 重复的id,标记或父ID 0x0

我有一个片段SearchPageFragment(代表平板电脑上的主视图),它本身包含两个片段:

<fragment   android:name="com.test.fragments.SearchFormFragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="2dp"
            android:id="@+id/searchFormFragment"
            android:tag="searchFormFragmentTag">
    <!-- Preview: layout=@layout/fragment_search_form -->
</fragment>           
<fragment   android:name="com.test.fragments.SearchResultsFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/searchResultsFragment">
    <!-- Preview: layout=@layout/fragment_search_results -->
</fragment>
Run Code Online (Sandbox Code Playgroud)

一切正常 - 页面加载,一切正常......直到你改变方向.当您执行以下错误时:

java.lang.IllegalArgumentException: Binary XML file line #10: Duplicate id 0x7f08001f, tag searchFormFragmentTag, or parent id 0x0 with another fragment for com.test.fragments.SearchFormFragment
                                    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:262)
                                    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
Run Code Online (Sandbox Code Playgroud)

切换方向时,这是一系列调用:

SearchPageFragment(4911): Creating...
SearchPageFragment(4911): Inflating...
    SearchFormFragment(4911): Creating...
    SearchFormFragment(4911): Inflating...
    SearchResultsFragment(4911): Creating...
    SearchResultsFragment(4911): Inflating...

// Change Orientation

SearchPageFragment(4911): Pausing...
    SearchFormFragment(4911): Pausing...
    SearchResultsFragment(4911): Pausing...
SearchPageFragment(4911): Destroying...
    SearchFormFragment(4911): Destroying...
    SearchResultsFragment(4911): Destroying... …
Run Code Online (Sandbox Code Playgroud)

android fragment orientation-changes

4
推荐指数
1
解决办法
7199
查看次数

将CustomViews创建为可在项目中使用的模块化和可重用组件

我目前正在创建相当大规模的Android应用程序.作为应用程序的一部分,我创建了一个自定义视图(许多之一).

有问题的自定义视图在功能方面非常广泛,因此有很多布局,资源和绘图可用于响应不同的设备,方向,分辨率等.

如何将此功能分离出来,以便可以单独开发,而不会污染项目其余部分的资源.(另外,让它可以跨项目共享而无需解开资源).

我希望有可能以某种方式以某种方式"罐装"它,但担心这可能是不可能的.如果有人有任何策略来实现这一目标会很棒.

android modularity custom-view

4
推荐指数
1
解决办法
545
查看次数

从本机代码(JNI/NDK)创建,填充和返回2D String数组

我发现这个特殊的代码非常困难(尤其是因为我一周前才开始玩C).

我一直在努力寻找正确的语法来正确地在C中创建一个java字符串数组(即一个jstring对象数组,即一个表示jstring对象数组的对象).我一直在使用以下资源,从中我已经构建了编译的代码.我不确定之后发生的错误是由于语法错误还是由于完全独立的原因.由于代码大多是孤立的,我假设语法不正确.

(太阳原生编程文档太阳JNI文档)

代码编译但在传递"FindClass"代码行之后,会发送一个SIGSEGV信号,该信号会终止C进程:

jint size = 5;
jclass StringObject = (*env)->FindClass(env, "java/lang/String");
jobjectArray sampleMessage = (*env)->NewObjectArray(env, size, StringObject, NULL);
jobjectArray returnArray = (jobjectArray) (*env)->NewObjectArray(env, messageCount, &sampleMessage, 0);
Run Code Online (Sandbox Code Playgroud)

有人能指点我这个有用的资源吗?或者确认语法是否正确.

编辑

我的大部分问题是调试此代码导致了问题.我没有时间缩小再现因素,但是通过eclipse跳过gdb-client中的JNI代码并不起作用.

java string java-native-interface multidimensional-array

3
推荐指数
1
解决办法
1万
查看次数

访问ActionBar中的视图

我正在尝试将水平进度条添加到我的视图中,如下所示:

RES/menu.xml文件

<item   android:id="@+id/menuItemProgress"
        android:title="Progress"
        android:actionLayout="@layout/component_cancellable_progressbar"
        android:showAsAction="always"/>
Run Code Online (Sandbox Code Playgroud)

component_cancellable_progressbar.xml

<FrameLayout    xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/searchProgressWrapper"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content">
<ProgressBar    android:id="@+id/searchProgress"
                android:layout_height="30dp"
                android:layout_width="150dp"
                style="@style/Custom.Widget.ProgressBar.Horizontal"
                android:max="100" />
<ImageView      android:id="@+id/cancelSearch"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content"
                android:paddingRight="8dp" 
                android:layout_gravity="right|center_vertical" 
                android:src="@android:drawable/ic_notification_clear_all"
                android:scaleType="fitXY" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

如何从Action中访问此ProgressBar(使其成为Visisble/Invisible/Progress)?

android android-actionbar

3
推荐指数
1
解决办法
8787
查看次数

将"Android库项目"的jar包括在引用它们的项目中

Android的一个新功能是创建图书馆计划的能力.

这对于您可能正在开发的许多应用程序中的单元测试和共享通用功能非常有用,但我似乎偶然发现了它们的实现中的错误.

当您遇到以下情况时:

- LibraryProject包含LibraryProject/libs/folder/lib.jar在其构建路径中.

- ReferencingProject参考LibraryProject.

ReferencingProject你无法访问任何内部lib.jar(例如常量用于与方法进行通信Library Project).

对此的解决方案是在引用项目中包含"lib.jar"作为外部库,但是这种方法开始否定通过创建多个手动添加的资源可以移动/更改来自拥有自包含库项目所获得的好处在图书馆项目的开发过程中(更不用说引起一些相当混乱的错误).

有没有办法将包含的libs类暴露给引用项目,而不必手动引用它们作为外部jar?

android library-project

3
推荐指数
1
解决办法
4305
查看次数

您是否可以在不使用ActionBar的情况下添加Chromecast功能

我一直在使用Google的示例应用程序来准备我们的Chromecast功能,

然而,我发现你需要ActionBar(由谷歌实施)中有一个按钮ActionProvider,以便将你的选择器附加到.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
    MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
    mediaRouteActionProvider.setRouteSelector(mCaster.getMediaRouteSelector());
    return true;
}
Run Code Online (Sandbox Code Playgroud)

完整,整个示例和API似乎是热线连接到使用此按钮的中心.我很好地重现了Android试图在这里使用的外观和感觉 - 但我在我的应用程序中使用自定义ActionBar,这意味着我没有任何"钩子"来选择路线等.

有谁知道如何解决这个问题?

android chromecast

3
推荐指数
1
解决办法
2627
查看次数