是否有Android intent-filter在用户切换到应用程序时触发?

时间:2013-09-03 03:34:09

标签: android android-intent cordova

我非常擅长在Android应用中配置AndroidManifest.xml文件,我正在构建的应用是使用带有Javascript和HTML的Phonegap,而不是本机代码。

我的Javascript代码中有一些操作,我想在每次用户“打开”应用时触发。我发现的是,“开放”的概念比我最初理解的更多。如果用户打开应用程序,然后切换到另一个应用程序,然后返回到第一个应用程序,第一个应用程序实际上仍然在后台运行,因此它没有启动。我想将其描述为“切换”回第一个应用程序会更准确。

我的问题是,我有一些Javascript,每次用户切换到我的应用程序时都会运行,无论是第一次打开它还是在后台运行。我没有做任何特定的配置来实现这一点,它似乎是默认行为。

但是,我需要执行的一些操作是基于AndroidManifest.xml中的设置,但是如果第一次打开应用程序则执行它们,如果用户是则不是切换回当前在后台运行的应用。具体来说,我想根据用户是否通过电子邮件中的链接打开应用来执行操作,我为此设置了<intent-filter>

当用户从电子邮件中的链接启动我的应用时,无论应用是否已在后台运行,我都可以通过该方式进行监听吗?

我认为这可能是相关的,因此我的<activity>中的AndroidManifest.xml标记会“监听”通过网址启动的应用:

    <activity
        android:name="com.xxxxxxx.xxxxxxx.MainActivity"
        android:label="@string/app_name" >
        <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.VIEW" />

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

            <data
                android:host="xxxxxxx.com"
                android:scheme="http" />
            <data
                android:host="xxxxxxx.com"
                android:scheme="https" />
        </intent-filter>
    </activity>

以下是onCreate()文件中的MainActivity.java函数:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.setIntegerProperty("splashscreen", R.drawable.splash);
    super.loadUrl(Config.getStartUrl(), 3000);

    adView = new AdView(this, AdSize.BANNER, AdMob_Ad_Unit);
        LinearLayout layout = super.root;
        layout.addView(adView);
        AdRequest request = new AdRequest();
        adView.loadAd(request); 
}

1 个答案:

答案 0 :(得分:1)

将其放入Launcher活动中:

//this method is called every time the Activity is Created or Re-Created
//we check for null to see if the activity was only Created instead of Recreated
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(savedInstanceState == null){ 
        myMethod(getIntent());
    }    
}

//This method will be called only when the Activity is already created and receives
//a new Intent
@Override
protected void onNewIntent(Intent it){
    super.onNewIntent(it);
    myMethod(it)
}

private void myMethod(Intent intent){
    if(intent.getAction().equals("put here the WebIntent action string or URL as they call it"){
        //your code here
    }
}