intent)?

iugsix8n  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(464)

我正在尝试从我的设备使用nfc硬件。但是,问题是,当我注册活动以接收意图时:

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

我在一个活动而不是一个片段中接收结果。有没有办法在片段中处理这个结果?
提前谢谢!

9o685dep

9o685dep1#

我通过以下方式解决了问题:
在myactivity.java中

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}

在myfragment.java中

@Override
public void onStart() {
    super.onStart();
    if (getActivity() != null && getActivity().getIntent().hasExtra(...)) {
        // do whatever needed
    }
}
ne5o7dgx

ne5o7dgx2#

onNewIntent 属于活动,因此不能将其包含在片段中。你能做的就是当数据到达你的片段时把它传递给它 onNewIntent 如果你有碎片的参考资料。

Fragment fragment;  
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    // Check if the fragment is an instance of the right fragment
    if (fragment instanceof MyNFCFragment) {
        MyNFCFragment my = (MyNFCFragment) fragment;
        // Pass intent or its data to the fragment's method
        my.processNFC(intent.getStringExtra());
    }

}
aurhwmvo

aurhwmvo3#

我们以一种更动态的方式来处理调用,通过在 Activity 比如:

// ...

public class ActivityMain extends AppCompatActivity {

    // ...

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Fragment fragment = getFragment();
        if (fragment != null) {
            try {
                Method method = fragment.getClass().getMethod("onNewIntent", Intent.class);
                method.invoke(fragment, intent);
            } catch (NoSuchMethodException ignored) {
            } catch (IllegalAccessException | InvocationTargetException e) {
                Log.e(TAG, "Failed to call onNewIntent method for class: " + fragment.getClass().getSimpleName());
            }
        }
    }

    public Fragment getFragment() {
        //if (BuildConfig.UI_NAVIGATION_DRAWER) {
            FragmentManager manager = this.getSupportFragmentManager();
            manager.executePendingTransactions();
            return manager.findFragmentById(R.id.my_main_content);
        //} else {
            // TODO: Handle view pager.
        //}
    }
}

后来在任何时候 Fragment 需要实施:

@SuppressWarnings("unused")
  public void onNewIntent(Intent intent) {
    Log.i(TAG, "onNewIntent: " + intent);
  }

相关问题