Vlastní android aplikace spouštěná ze stránek prohlížeče

Diskobolos

Zdravím všechny. Byl jsem nucen nastudovat vývoj aplikací pro android. Vše jsem tak nějak zvládl. Princip je ten, že hlavní aplikace je z nějakého důvodu v HTML (offline režim) a pro potřeby vstupu chci spouštět nativní androidí aplikaci. Tu jsem sesmolil, odladil a dle různých rad (např. z http://stackoverflow.com/questions/2448213/how-to-implement-my-very-own-uri-scheme-on-android) jsem upravil svůj AndroidManifest.xml. Problém je ten, že i když mám v manifestu
Kód: [Vybrat]
<intent-filter>, resp. uvnitř
Kód: [Vybrat]
<data android:scheme="myapp" android:host="my.path"/>, tak generovaný odkaz v HTML
Kód: [Vybrat]
<a href="myapp://my.path:123456">načti vstupy</a> nefunguje (chrome hlásí, že url myapp://my.path:123456 není dostupné). Progoogloval jsem všelico a systémem pokus/omyl zkoušel také všelico, ale nic nezafungovalo. Může mi někdo podat vysvětlení s funkční ukázkou. Děkuji mnohokráte.

Obsah manifestu:
Kód: [Vybrat]
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:debuggable="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <data android:scheme="myapp" android:host="my.path"/>
                <action android:name="android.intent.action.MAIN" />

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


Re:Vlastní android aplikace spouštěná ze stránek prohlížeče
« Odpověď #1 kdy: 11. 03. 2015, 16:37:56 »
Tezko rict, ale mas tam internet permission?

Sten

Re:Vlastní android aplikace spouštěná ze stránek prohlížeče
« Odpověď #2 kdy: 11. 03. 2015, 18:08:24 »
Prohlížeč používá akci android.intent.action.VIEW, MAIN je pro launcher.

Diskobolos

Re:Vlastní android aplikace spouštěná ze stránek prohlížeče
« Odpověď #3 kdy: 12. 03. 2015, 07:25:22 »
Prohlížeč používá akci android.intent.action.VIEW, MAIN je pro launcher.

Díky Stene, to jsem si i myslel. Nicméně jak udelám z MAIN ono VIEW. Když to přepíšu a spustím kód, tak mi to hlásí chybu "Error: Default Activity not found". Díky za nakopnutí.

Někdo

Re:Vlastní android aplikace spouštěná ze stránek prohlížeče
« Odpověď #4 kdy: 12. 03. 2015, 10:31:03 »
Prohlížeč používá akci android.intent.action.VIEW, MAIN je pro launcher.

Díky Stene, to jsem si i myslel. Nicméně jak udelám z MAIN ono VIEW. Když to přepíšu a spustím kód, tak mi to hlásí chybu "Error: Default Activity not found". Díky za nakopnutí.

Musite v Manifestu specifikovat jednu Activity jako Launcher:

Kód: [Vybrat]
<activity
        android:name="com.your.package.name.YourActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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


Sten

Re:Vlastní android aplikace spouštěná ze stránek prohlížeče
« Odpověď #5 kdy: 12. 03. 2015, 11:39:31 »
Prohlížeč používá akci android.intent.action.VIEW, MAIN je pro launcher.

Díky Stene, to jsem si i myslel. Nicméně jak udelám z MAIN ono VIEW. Když to přepíšu a spustím kód, tak mi to hlásí chybu "Error: Default Activity not found". Díky za nakopnutí.

Protože mícháte dva různé intent filtry dohromady:

Kód: [Vybrat]
<activity …>
    <!-- Tohle je pro launcher (spouštěč aplikací) -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>

    <!-- Tohle je pro prohlížeč -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="myapp" android:host="my.path"/>
    </intent-filter>
</activity>

Btw. pokud filtr obsahuje vaše vlastní schéma, je většinou zbytečné filtrovat i podle hostitele (android:host), protože stejně nikdo jiný to schéma používat nebude. Filtrování podle hostitele (a cesty) se používá spíš pro filtr pro běžná schémata jako http a https, kde bez vaší aplikace zobrazíte stránku, odkud se dá stáhnout, a s vaší aplikací spustíte nějakou akci.