在Gluon中调用Android Intent处理程序代码的位置

时间:2017-11-17 20:26:43

标签: android javafx gluon gluon-mobile javafxports

尝试处理AndroidManifest.xml中指定的意图。不确定在何处调用创建的Service方法。与在活动中处理意图的本机android代码不同。 参考http://gluonhq.com/handling-android-native-activities-like-a-pro/ 尝试在应用程序主类的init方法中调用服务(但似乎没有调用intent处理程序方法)

Gluon应用程序从android

中的其他应用程序接收数据

的AndroidManifest.xml

    <?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.nativeeg" android:versionCode="1" android:versionName="1.0">
        <supports-screens android:xlargeScreens="true"/>
         <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="21"/>
        <application android:label="NativeEg" android:name="android.support.multidex.MultiDexApplication" android:icon="@mipmap/ic_launcher">
                <activity android:name="javafxports.android.FXActivity" android:label="NativeEg" android:configChanges="orientation|screenSize">
                        <meta-data android:name="main.class" android:value="com.nativeeg.NativeEg"/>
                        <meta-data android:name="debug.port" android:value="0"/>
                        <intent-filter>
                                <action android:name="android.intent.action.MAIN"/>
                                <category android:name="android.intent.category.LAUNCHER"/>
                        </intent-filter>
                         <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>

                </activity>

                <activity android:name="com.gluonhq.impl.charm.down.plugins.android.PermissionRequestActivity" />
        </application>
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

处理意图的本地服务

import nativeutility.ReceiveFromApps;
import javafxports.android.FXActivity;
import android.content.Intent;

/**
 *
 * @author Vaishnavi
 */
public class AndroidReceiveFromApps implements ReceiveFromApps{

    @Override
    public void receiveData() {

         Intent intent = FXActivity.getInstance().getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        System.out.println("in handle intent!");
        if ("text/plain".equals(type)) {
           // Handle text being sent
           System.out.println("text data");
        } else if (type.startsWith("image/")) {
            // Handle single image being sent
            System.out.println("image data");
        }
    } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
          System.out.println("in handle intent!");
        if (type.startsWith("image/")) {
           // Handle multiple images being sent
            System.out.println("multiple image data");
        }
    } else {
        // Handle other intents, such as being started from the home screen
    }     
    }

}

Gluon Main class:

public class NativeEg extends MobileApplication {

    @Override
    public void init() {
        AppViewManager.registerViewsAndDrawer(this);
        System.out.println("in main");
         Services.get(ReceiveFromApps.class).ifPresent(service -> service.receiveData());

    }
...


package nativeutility;
import com.gluonhq.charm.down.DefaultServiceFactory;
public class ReceiveFromAppsFactory extends DefaultServiceFactory<ReceiveFromApps> {
    public ReceiveFromAppsFactory() {
        super(ReceiveFromApps.class);
    }}

接口

package nativeutility;
public interface ReceiveFromApps {
     public void receiveData();
}

0 个答案:

没有答案