вывести активность Android вперед из фонового потока - PullRequest
0 голосов
/ 18 октября 2011

У меня есть действие, которое запускает системный браузер через Intent. Незадолго до этого я делаю HTTP GET на какой-то другой URL. На этот запрос GET будет дан ответ, как только пользователь завершит свою задачу в браузере (войдя в систему с помощью OAuth).

Я бы хотел закрыть браузер и / или вернуть активность моего приложения на передний план.

Я не хочу использовать WebView, потому что хотел бы избежать ощущения, что я могу пытаться шпионить за паролями.

Есть идеи, как это решить? Возможно ли это вообще?

Спасибо большое!

Daniel

Ответы [ 2 ]

1 голос
/ 08 октября 2013

Вот что сделал трюк в моем проекте.

Манифест приложения довольно стандартный:

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

Вот фрагмент кода фонового потока, который отправляет намерение повторно показать действие:

public class AlarmThread extends Thread {

    private int mSleepTime;

    public AlarmThread(int sleepSeconds) {
        super("AlarmThread");
        mSleepTime = sleepSeconds * 1000;
    }
    @Override
    public void run() {
        Log.i("thread", "started sleeping for " + mSleepTime + " milliseconds");
        try {
            Thread.sleep(mSleepTime);
        } catch (InterruptedException e) {
            // ignored
        }
        Log.i("thread", "creating intent to bring activity to foreground");
        Intent intent = new Intent(MainActivity.getContext(), MainActivity.class);
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        MainActivity.getContext().getApplicationContext().startActivity(intent);
    }
}

Обратите внимание, что трюк в части MainActivity.getContext().getApplicationContext().startActivity(intent); (последняя строка выше).

В MainActivity я добавил метод getContext:

public static Context getContext() {
    return mInstance;
}

И элемент 'mInstance' устанавливается в 'onCreate':

private static MainActivity mInstance = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Other code....

    mInstance = this;
}
1 голос
/ 18 октября 2011

Убедитесь, что OAuth открывает URL-адрес, похожий на yourapp: // success

Затем вы добавляете фильтр намерений для обработки этого пользовательского протокола и адреса.Более подробная информация на http://developer.android.com/guide/topics/intents/intents-filters.html#ifs

...