代码之家  ›  专栏  ›  技术社区  ›  AhmadReza Payan

android:onActivityResult intent在通过浏览器链接启动活动时为空

  •  1
  • AhmadReza Payan  · 技术社区  · 6 年前

    我想为我的Cordova/Ionic Android应用程序实现一个插件。 插件中有两个主要文件:

    1。myplugin.java 这将通过离子(离子3,角5)应用来调用。

    2。browserLinkActivity.java 负责启动浏览器并从浏览器中获取数据。

    myplugin.java:

    插件将启动 BrowserLinkActivity 使用这些代码行:

    Intent intent = new Intent(context, BrowserLinkActivity.class);
    cordova.startActivityForResult((CordovaPlugin) this, intent, REQUEST_CODE);
    

    因此, onActivityResult 在插件中被重写:

    @Override
    public void onActivityResult( int requestCode, int resultCode, Intent data) {
     // The data parameter is always null
    }
    

    这是活动。浏览器意图将从 浏览器链接活动 活动 onCreate .

    browserlinkactivity.java:

    public class BrowserLinkActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
    
        Uri data = getIntent().getData();
        if (data == null){
    
          Intent browserIntent = new Intent(Intent.ACTION_VIEW, "The website URL");
    
          browserIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | 
                    Intent.FLAG_ACTIVITY_NO_HISTORY | 
                    Intent.FLAG_FROM_BACKGROUND | 
                    Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
          startActivity(browserIntent);
        }
        else { // Activity has started through the browser-link
            Intent returnIntent = new Intent();             
            returnIntent.putExtra("Key","Something");
    
            setResult(Activity.RESULT_OK, returnIntent);
            finish();
        }
    
    }
    

    我已经定义了 plugin.xml 文件如下:

    <config-file target="AndroidManifest.xml" parent="/manifest/application">
        <activity android:name="cordova.plugin.mycustomplugin.BrowserLinkActivity"
           android:launchMode="singleTask" android:noHistory="true">
    
            <intent-filter>
                    <action android:name="android.intent.action.VIEW"/>
    
                    <category android:name="android.intent.category.DEFAULT"/>
                    <category android:name="android.intent.category.BROWSABLE"/>
                    <data android:scheme="http" android:host="MyHost.COM" />
            </intent-filter>
    
        </activity>
    </config-file>
    

    但是,问题是当从浏览器链接调用活动时,setResult方法不起作用,并且 Intent 参数在 活动结果 总是 NULL (请求代码是 RESULT_CANCELED 也一样。

    我怎么能阻止 browser-link 从启动/创建 浏览器链接活动 活动?(我认为这是导致 setResult 工作不正常)。

    注: 我已经加了 Intent.FLAG_ACTIVITY_SINGLE_TOP Intent.FLAG_ACTIVITY_CLEAR_TOP browserIntent 并添加 android:launchMode="singleTask" 对于 浏览器链接活动 插件 但还是不行。

    如有任何帮助,我们将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Reaz Murshed    6 年前

    我早就建议设置 launchMode SingleTask 对于 BrowserLinkActivity .

    然而,后来问题的作者发现 android:noHistory="true" plugin.xml 割开 浏览器链接活动 具有这两个意图标志的活动(即 FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP )在这种情况下起作用,结果被完全抵消了。

    希望对未来的其他开发人员有所帮助。