Open Application in App Link outside of receiver - java

When using App Links, the receiver app (EX. Whatsapp) is paused, and your application's activity is opened on top of the receiver app.
For example, if you open your link from a WhatsApp's chat page, the new activity isn't opened from your app (The WhatsApp's task in recent apps includes your app), while your app isn't in the recent task.
But what if I want to open my application in a new task? Separate from the receiver app?
This is my Manifest file of the activity opened from the App Link:
<activity
android:name=".Activitys.MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter
android:autoVerify="true"
android:label="#string/app_name">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="eventtk.uae-dc.com"
android:pathPrefix="/product/"
android:scheme="https" />
</intent-filter>
</activity>
Is there a thing I should add to the IntentFilter?

Not sure if I understood correctly what you would like to achieve, but you can try
to add
android:launchMode="singleTask"
to your activity definition.
More information here:
https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en

Related

How to open a specific activity from an external link clicking

I know this question is not new, but its a bit different from already asked questions. I have a website that provides links to my app. The links direct users to specific data on my app. This is the layout of my app: I have 4 activities as Activity1.class, Activity2.class, Activity3.class, and of course the MainActivity.class which is the launcher activity.
My worry is this: On my website, I have 3 buttons: button 1 goes to open directly Activity1 on my app (assuming the app is already installed on the device), Button 2 on website opens Activity2 in my app.
Note: the app and the website are not by any means linked.
My question is: how to get a URL link to specific activity on my app. I need 3 URLs that open different 3 activities. I need these links for external use, such that they open a specified activity whey clicked.
Something like: http://myapppackage/ACTIVITY1.
This is just an example.
In you AndroidManifest.xml add intent-filters to the activities like this
<activity android:name=".ACTIVITY1">
<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="myapppackage"
android:pathPattern="/ACTIVITY1" />
</intent-filter>
</activity>
<activity android:name=".ACTIVITY2">
<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="myapppackage"
android:pathPattern="/ACTIVITY2" />
</intent-filter>
</activity>
<activity android:name=".ACTIVITY3">
<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="myapppackage"
android:pathPattern="/ACTIVITY3" />
</intent-filter>
</activity>
For more info check this out
Deep Linking In Android

Figuring out the launcher on this Android Studio Github project

Still a little bit new to Android studio and app development. On this project: https://github.com/watabou/pixel-dungeon, which file is acting as the MainActivity.java file? As in, which file is the main launcher of the application, how do you tell?
The activity with the intent filters android.intent.action.MAIN and android.intent.category.LAUNCHER is the launcher for any app,
Just check which activity it has bellow intent filter that is launcher,
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
In that project PixelDungeon is the launcher activity.
Your launcher activity is defined in your android manifest (AndroidManifest.xml), it should look like this:
<activity
android:name=".activity.Login_screen"
android:label="Activity Validation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
For your case, if you want to edit your launcher activity just change ".activity.Login_screen" for the activity you want to display on launch. However, make sure that there are no duplicate definitions.
As you can see in your code:
<activity
android:label="#string/app_name"
android:name=".PixelDungeon"
android:screenOrientation="portrait">
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Adding 3rd party application into Settings.apk

Recently I'm building a AOSP ROM from source. What I wanted to do is, add a 3rd party application into Settings app and It should be launched only from Settings and it should be invisible from Launcher.
Here's what I did, It fails everytime.
Removed these lines from apps AndroidManifest.xml
android:name="android.intent.category.LAUNCHER" />
and added below lines in SettingsActivity.java from Settings app.
if (KA_FRAGMENT.equals(fragmentName)) {
Intent kaIntent = new Intent();
kaIntent.setClassName("com.cyborg.manager", "com.cyborg.manager.activities.MainActivity");
startActivity(kaIntent);
finish();
return null;
}
Also added below lines in AndroidManifest.xml of Settings
<activity android:name="Settings$KActivity"
android:label="#string/hit_perform"
android:icon="#drawable/hit_performance_icon"
android:taskAffinity="" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
<intent-filter android:priority="1">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.urom" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.ka" />
</activity>
Although, it works fine when 3rd party app is visible in launcher
If you want to play with custom ROM I'd recommend getting familiar with Android fundamentals first.
What makes you activity shown by launcher is this <intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
especially these two lines:
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
so remove them and you are done.

How to detect POS transaction in Android Wallet Application?

I am developing Android Wallet application using SEEK API and NFC. I have the Visa applet installed in the Sim card. My question is, How to detect if a successful/unsuccessful contact is made to the POS terminal? Is there any Intent Action available in Android that I can put in some activity or some receiver?
Thanks.
Actually I Found the way of detecting POS terminal transaction. The NFC API, TRANSACTION_DETECTED is hidden. When transaction is there, TagDetectedActivity will launch.
<activity android:name=".TagDetectedActivity" android:launchMode="singleTask">
<intent-filter>
<action android:name="android.nfc.action.TRANSACTION_DETECTED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="nfc" android:host="secure" android:port="0" android:pathPrefix="/axxxxx" />
</intent-filter>
<intent-filter>
<action android:name="com.gsma.services.nfc.action.TRANSACTION_EVENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="nfc" android:host="secure" android:port="0" android:pathPattern="/.*/axxxxx.*" />
</intent-filter>
</activity>

Make home intent take to specific application activity?

I've built a project that contains different packages and activities, say:
com.example.package1.Activity1
com.example.package2.Activity2
The first package holds a launcher. On my project manifest file this activity is listening to the home intent:
// Launcher
<activity android:name=".package1.Activity1" android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
// package2.activity1
<activity android:name=".package2.activity1" android:label="#string/package2_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
My problem is that when a user clicks Home the launcher isn't opened, instead the user is taken to the last opened activity of the app. EG: User opens package2.MainActivity from default launcher > goes to another app > clicks home > package2.MainActivity is opened again.
Is this normal? How do I make sure the device Home button takes to .package1.activity1?
If you are trying to create a HOME-screen replacement, then the activity for that needs to have the following in its <activity> tag in the manifest:
android:launchMode="singleInstance"
This will ensure that only one instance of this activity ever exists and that when this activity launches other activities that they will all go into new tasks and not be a part of the HOME-screen replacement's task.
I am not sure but please try to this code:
// package2.activity1
<activity android:name=".package2.activity1" android:label="#string/package2_name" >
<intent-filter>
<action android:name="android.intent.action.View" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Categories

Resources