意图过滤器未按预期工作

时间:2012-07-20 04:00:11

标签: android android-intent

您好我创建了一个Android项目,我在其中进行主要活动

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String ss="https://accounts.google.com/o/oauth2/auth?client_id=anonymous&redirect_uri=https://cloudspokeproject.appspot.com/oauth2callback&response_type=code&scope=https://www.googleapis.com/auth/apps.groups.settings  https://apps-apis.google.com/a/feeds/groups/";

            Uri url=Uri.parse(ss);
            Intent in=new Intent(Intent.ACTION_VIEW,url);
            startActivity(in);


    }

然后创建了一个响应活动 代码

public class Response extends Activity {

@Override
    public void onCreate(Bundle bundle){
        super.onCreate(bundle);
        TextView text=new TextView(this);
    Uri uri=this.getIntent().getData();
    String code=uri.getQueryParameter("code");
    URL url;
    try {
        url = new URL("https://accounts.google.com/o/oauth2/token");

         String param="code="+code+"&client_id=anonymous&client_secret=anonymous&redirect_uri=https://cloudspokeproject.appspot.com/oauth2callback&grant_type=authorization_code";

         HttpURLConnection connection = 
    (HttpURLConnection)url.openConnection(); 
         connection.setDoOutput(true); 
         connection.setRequestMethod("POST"); 
         connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
         connection.getOutputStream().write( param.getBytes() ); 
      InputStream str= connection.getInputStream();
      BufferedReader reader=new BufferedReader(new InputStreamReader(str));
    String l="";
    String l1="";
    while((l=reader.readLine())!=null){
        l1+=l;
    }
        text.setText(l1);
        setContentView(text);

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    }}

这是我的清单文件代码

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="15" />

                                           

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

    </activity>
 <activity
     android:name=".Response"
     android:label="Hello World"
     android:exported="false">
     <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:host="cloudspokeproject.appspot.com/oauth2callback" android:scheme="https"/> 
          </intent-filter>
 </activity>


</application>

我正在尝试为应用程序实施Google身份验证,主要活动正在打开Goog​​le登录,并且在登录后将其重定向到clouspokeproject.appspot.com/oauth2callback但是因为我在menifest中的响应活动中放置了一个意图过滤器。在浏览器中调用url cloudspokeproject.apspot.com/oauth2callback然后android应该将其重定向到活动Response.i成功实现了twitter和其他几个api的oauth但这次它没有重定向到Response活动 任何人都可以告诉我哪里错了。我知道错误是非常小的请指出我,以便我能纠正它。

2 个答案:

答案 0 :(得分:0)

您发出的意图是打开浏览器而不是调用您的响应活动

答案 1 :(得分:0)

嗨返回我的活动意图过滤器应该像

<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:host="cloudspokeproject.appspot.com" android:scheme="https"/> 
          </intent-filter>

我必须在host属性中删除/ oauth2callback,因为它是一个非常罕见的url,在项目中只使用一次,所以它现在对我来说很好。