Заголовок объясняет все ... У меня есть этот фрагмент кода в моем приложении:
String url = createTelUrl("3112007315");
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse(url));
context.startActivity(intent);
Он делает звонок, но как только звонок заканчивается, мое приложение вылетает. Я хотел бы вернуться к своему заявлению после завершения вызова, но я прочитал этот пост , и, похоже, это невозможно. Итак ... есть ли способ хотя бы приостановить мое приложение и возобновить его после завершения вызова?
EDIT:
Спасибо за два ответа, которые я получил, я чувствую, что действительно близок к своей цели ... Я уже сделал кое-что из того, что вы, ребята, предложили. Но, может быть, я не объяснил некоторые детали приложения ... Я разрабатываю игру Who Wants To A Millonarie , поэтому мне нужно реализовать вызовы (я не знаю, как это называется США или другие страны, но здесь мы называем это «звонком другу»).
В любом случае ... Я сделал слишком много изменений в этом приложении, и теперь оно не падает. Но холст, на котором я рисую пользовательский интерфейс, не отображается после завершения вызова.
У меня есть SurfaceView
, который содержит пользовательский интерфейс. Для этого SurfaceView
я создал поток, который предназначен для обновления пользовательского интерфейса ... это в основном то, что делает поток:
@Override
public void run() {
Canvas c;
while (_run) {
c = null;
try {
c = _surfaceHolder.lockCanvas(null);
// Check if should wait
synchronized (_surfaceHolder) {
_panel.onDraw(c);
}
} finally {
// do this in a finally so that if an exception is thrown
// during the above, we don't leave the Surface in an
// inconsistent state
if (c != null) {
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
Но, как только звонок закончился, я получил черный экран. Поверхность есть (я знаю это, потому что она все еще может получать некоторые сенсорные события), но она ничего не показывает. Еще одна вещь, которую стоит принять во внимание, это то, как я запускаю поток из класса SurfaceView
:
public void surfaceCreated(SurfaceHolder holder) {
hilo.setRunning(true);
try{
hilo.start();
}catch(IllegalThreadStateException ite){
Log.e("wwtbam", "god dammed");
}
}
Это хорошо сработало, прежде чем я начал осуществлять телефонные звонки. Проблема здесь в том, что после завершения вызова и повторного запуска запускается метод start, который выдает IllegalThreadStateException
, поскольку поток уже запущен. Я пытался использовать некоторые «техники», чтобы приостановить поток пользовательского интерфейса во время вызова, но я не смог решить эту проблему. Я пытался сделать что-то вроде:
// this in the UI thread class
if(haveToWait)
wait();
....
// this in the surface view class
if(callEnded)
hilo.notify();
Но это не сработало. Я также попробовал некоторые другие «приемы», такие как sleep(50);
вместо wait();
, но он тоже не работает.
Со всей этой информацией, которую я предоставил ... что вы могли бы мне предложить?