Как доставить на другую деятельность с помощью ACTION_VIEW - PullRequest
0 голосов
/ 24 августа 2011
    <activity android:name=".AnotherActivity">
        <intent-filter >
            <action android:name="android.intent.action.GET_CONTENT" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="vnd.android.cursor.dir/vnd.google.note1" />
        </intent-filter>
    </activity>

    <activity android:name=".ThirdActivity">
        <intent-filter >
            <action android:name="android.intent.action.CHOOSER" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="vnd.android.cursor.dir/vnd.google.note2" />
        </intent-filter>
    </activity>`

Это мой AndroidManifest.xml в демоверсии проекта Android. Я использую ContentProvider для доставки запроса на другую деятельность. Способ доставки выглядит так:

private OnClickListener l = new OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        startActivity(intent);
    }
};
private Intent intent;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);
    Button btn = (Button)findViewById(R.id.button1);
    btn.setOnClickListener(l);
    intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("content://com.test/b"));
}

Мой вопрос заключается в том, как я различаю эти два вида деятельности при запуске.

Единственный способ, о котором я подумал, это сделать два актива с разными mimeTypes в AndroidManifest. И отправьте запрос, используя другой uri, и переопределите метод getType в провайдере, чтобы вернуть соответствующий mimetype для двух действий.

1 Ответ

0 голосов
/ 24 августа 2011

Есть несколько способов определить, какое действие обрабатывает ваше намерение.В зависимости от того, что вы пытаетесь сделать, вы можете просто настроить класс так, чтобы он непосредственно выбирал, какое действие должно быть инициировано.Например,

Intent intent = new Intent(this, ThirdActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("content://com.test/b"));
...