如果应用程序已启动,则Android无法按网址方式打开公开活动

时间:2017-02-14 09:08:58

标签: android url-scheme

我已经设置了清单方案中的StartActivity和MainActivity。

    <activity
        android:name=".StartActivity"
        android:label="@string/app_name"
        android:theme="@style/AppThemeNoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <data android:scheme="myApp" />
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MainActivity"
        android:launchMode="singleTask"
        android:parentActivityName=".StartActivity" />

StartActivity:

public class StartActivity extends InstrumentedActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_start);

        if (isLogin) {
            Intent intent = new Intent(context, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
        }
    }
}

原始设计是用户在浏览器中按下网址后,打开StartActivity,然后在用户登录时转到MainActivity。

这在第一次正常工作(应用被杀死并且用户按下了网址)。 但是当应用程序处于后台(在MainActivity中)时,在用户按下url之后,它并没有通过StartActivity,而只是onMesume of MainActivity。

有人知道原因吗?以及如何确保它转到StartActivity?感谢。

1 个答案:

答案 0 :(得分:1)

当你第一次从URL打开你的Activity时,那个时候创建​​了Activity onCreate()方法调用.But如果你的Activity在Background中那么 将调用onNewIntent()以覆盖此方法并将代码放在此处。

添加以下方法:IN MainActivity

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // add your code here 

}

在清单中:

<activity
 android:name=".MainActivity"
 android:launchMode="singleTask"
 />

开始活动:

Intent intent = new Intent(context, MainActivity.class);
startActivity(intent);

如果你想要传递任何输入值,那么你可以通过Bundle传入Intent,它被接收到onNewIntent(Intent intent),你就可以得到我们从Intent发送数据从一个Activity发送到下一个活动。