Custom scheme doesn't seem to launch in the app intent

匿名 (未验证) 提交于 2019-12-03 02:52:02

问题:

I'm trying to create an Android app that needs to use OAuth to authenticate (with the Google Wave data API)

I've specified a custom scheme in my AndroidManifest.xml so that any views to a url beginning "braindump://" should go to my app:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="org.enigmagen.braindump"     android:versionName="0.1"     android:versionCode="1">      <uses-sdk android:minSdkVersion="7"></uses-sdk>     <uses-permission android:name="android.permission.INTERNET"></uses-permission>      <application         android:icon="@drawable/icon"         android:label="@string/app_name"         android:debuggable="true">          <activity             android:name=".BrainDump"             android:label="@string/app_name"             android:launchMode="singleInstance">              <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />                 <category android:name="android.intent.category.BROWSABLE" />                 <data android:scheme="braindump" />             </intent-filter>          </activity>      </application>  </manifest> 

All that happens though is that after the redirect, the browser address shows the correct URL, but the page content is

You do not have permission to open this page. braindump://rest_of_address_here

Is there a specific permission that needs to be set to allow this sort of behaviour?

回答1:

I had the exact same problem (OAuth) and this is how I fixed it.

I've separated my Main from the class that will act on the URI.

Here's how the AndroidManifest.xml should look like:

<?xml version="1.0" encoding="utf-8"?>  [snip]            <activity android:label="@string/app_name" android:name="MainActivity">            <intent-filter>             <action android:name="android.intent.action.MAIN" />             <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>           </activity>           <activity android:label="@string/app_name" android:name="OAUTHActivity">            <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="myscheme" android:host="oauth" />            </intent-filter>           </activity>          </application>      [/snip] 

And I was able to open URIs like myscheme//oauth?oauth_verifier=xxx&oauth_token=yyy



回答2:

Actually, it's possible to do it with only one activity, just creating one more intent filter. Like this:

<activity android:name=".MyActivity"       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:scheme="my_scheme" android:host="my_app_host.com" />     </intent-filter> </activity> 


回答3:

I don't think this is exactly the cause of your problem, but I got this same error "You do not have permission to open this page" and it was because I was using a scheme with a capital letter. eg "Celly" instead of "celly". This worked fine in the emulator but failed on real devices. Changing it all to lowercase fixed it.



回答4:

According to the common tasks that should be:

<scheme android:name="braindump" /> 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!