2

BridgeKit を使用してインテントを開始し、Android ギャラリー ピッカーを起動して、選択した画像をバイトとして返します。

インテントは正しく開始され、画像を選択して PNG 表現を取得することもできますが、コールバックを使用してバイトを Obj-C ランドに返そうとすると、次のエラーが発生します。

W/dalvikvm( 3417): No implementation found for native Lmystuff/android/AndroidImageSelector;.imagePicked:([B)V
I/System.out( 3417): java.lang.UnsatisfiedLinkError: Native method not found: mystuff.android.AndroidImageSelector.imagePicked:([B)V

インテントは次のように開始されます。

AndroidIntent* intent = [ [AndroidIntent alloc] initWithContext: [ AndroidActivity currentActivity ]  class: [ AndroidImageSelector javaClass ] ];
[intent start];

AndroidImageSelector は JavaObject を拡張し、次のメソッドを含みます。

+ (NSString*) className
{
return @"mystuff.android.AndroidImageSelectorActivity";
}


+ (void) initializeJava
{
[ super initializeJava ];

[AndroidImageSelector registerCallback: @"imagePicked"
                     selector: @selector( imagePicked:)
                  returnValue: nil
                    arguments: [NSData className], nil ];
}

- (void) imagePicked: (NSData*) data
{
NSLog( @"IMAGE PICKED: %d", [ data length ] );
}

Java 側では、AndroidImageSelectorActivity は Activity を拡張し、以下を含みます。

private native void imagePicked( byte[] response );


protected void onActivityResult( int requestCode, int resultCode, Intent imageReturnedIntent )
    {
    super.onActivityResult( requestCode, resultCode, imageReturnedIntent );

    try
        {
        switch ( requestCode )
            {
            case SELECT_PHOTO:
                if ( resultCode == RESULT_OK )
                    {
                    Uri selectedImage = imageReturnedIntent.getData();

                    Bitmap bitmap = decodeURI( selectedImage );

                    ByteArrayOutputStream out0 = new ByteArrayOutputStream();
                    bitmap.compress( Bitmap.CompressFormat.PNG, 100, out0 );
                    byte[] pngBytes = out0.toByteArray();

                    imagePicked( pngBytes );
                    }
            }


protected void onCreate( Bundle savedInstanceState )
    {
    super.onCreate( savedInstanceState );

    Intent photoPickerIntent = new Intent( Intent.ACTION_PICK );
    photoPickerIntent.setType( "image/*" );
    startActivityForResult( photoPickerIntent, SELECT_PHOTO );
    }
4

2 に答える 2

1

目的の c 側で imagePicked: を実装する必要があります。基本的に、Java メソッドのネイティブ実装を提供することを Java に伝えましたが、それはありません。

于 2014-01-09T22:42:53.713 に答える
1

このバグは、Apportable SDK の次のアップデートで修正される予定です。申し訳ありません。

于 2014-05-20T00:35:45.810 に答える