在链接点击而不是浏览器 - Android上打开我的应用程序

时间:2014-10-02 08:09:12

标签: android url android-activity

如果应用程序安装在设备上,我想在链接点击而不是浏览器上打开我的应用程序,否则打开Goog​​le Play。 所以在搜索之后..这是我的清单

    <activity
        android:name="example.com.MyActivity"
        android:label="@string/title_activity_open_event_details" >
        <intent-filter>
            <data
                android:host="play.google.com"
                android:scheme="http"/>
            <action android:name="android.intent.action.VIEW" />

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


        </intent-filter>
    </activity>

这是我的活动

    public class MyActivity extends Activity {

private int EventId;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_open_event_details);

    tv = (TextView) findViewById(R.id.testtv);

    Uri data = getIntent().getData();
    if ( data != null )
    {
        String scheme = data.getScheme();
        String host = data.getHost(); 
        List<String> params = data.getPathSegments();
        String first = params.get(0); 
        String second = params.get(1); 

        int size = params.size();
    //  EventId  = params.get(size-1);
        String third = params.get(size-1);
        tv.setText(data.toString());
    }


  }


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.my_activity, menu);
    return true;
}

}

点击此链接时https://play.google.com/store/apps/details?id=example.com&evid=117 MyActivity已成功打开,但文本视图中显示的链接仅为https://play.google.com/store/apps/details?id=example.com而没有&amp; evid = 117,我需要获取一些数据并将其显示在我的活动中

你可以帮我知道我错过了什么吗? 提前致谢

1 个答案:

答案 0 :(得分:1)

要获得该ID,请尝试以下代码:

    Uri data = getIntent().getData();
    if (data != null) {
        String url = data.toString();
            try {
                List<NameValuePair> params = URLEncodedUtils.parse(new URI(url), "UTF-8");
                for (NameValuePair para : params)
                    if (para.getName().equals("evid")) {
                        String id = para.getValue(); //my id (117)
                        Log.v("myId",id);
                    }
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }

        }

此外,您不包括https协议。添加

<data android:host="play.google.com" android:scheme="https"/>

修改

我已经测试了这段代码并且它正在运行。我使用上面提供的代码和意图过滤器创建了一个简单的活动:

<intent-filter>
       <action android:name="android.intent.action.MAIN" />

       <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <action android:name="android.intent.action.VIEW"/>
        <data android:host="play.google.com" android:scheme="http"/>
        <data android:host="play.google.com" android:scheme="https"/>
 </intent-filter>

输出结果如预期的那样是117