Почему Waze DeepLink не работает в асинхронном режиме? - PullRequest
0 голосов
/ 13 апреля 2020

background

Я пытаюсь запустить waze с следующей целью из асинхронной задачи onPostExecute после того, как задача геокодирует адрес, но это не работает. ссылка работает нормально, как я плохо объясняю, у нее есть кое-что для запуска намерения из onPostExecute говорит, что не может разрешить намерение в logcat.

объявление класса:

public static class WazeAsyncLaunch extends AsyncTask<String, Void, Intent> {
    Context mContext = null;
    public WazeAsyncLaunch(Context context){
        mContext = context;
    }

это doInBackground

protected Intent doInBackground(String... addresses) {

    //does geocoding here, i give short version
    Uri intentURI = Uri.parse("https://waze.com/ul?ll=48.8566969,2.3514616&navigate=yes");
    Intent mapIntent = new Intent(Intent.ACTION_VIEW);
    mapIntent.setData(intentURI);
    mapIntent.addCategory(Intent.CATEGORY_DEFAULT);
    mapIntent.addCategory(Intent.CATEGORY_BROWSABLE);
    return mapIntent;
}

, а вот onPostExecute, где происходит ошибка

protected void onPostExecute(Intent result) {
    mContext.startActivity(result);
}

Я вызываю его из обработчика события кнопки onclick в mainacctivity, как этот

new WazeAsyncLaunch(MainActivity.this).execute(address);

основываясь на указателе сообщества, я также попробовал это в моем onPostExecute, но безрезультатно

String url = "https://www.waze.com/ul?ll=40.75889500%2C-73.98513100&navigate=yes&zoom=17";
Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( url ) );
startActivity( intent );

интересно, также не работает, когда я делаю:

adb shell am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT -c android.intent.category.BROWSABLE -d https://waze.com/ul?ll=48.8566969,2.3514616&navigate=yes

, но это работает, когда я делаю:

adb shell am start -d https://waze.com/ul?ll=48.8566969,2.3514616&navigate=yes

это также работает, когда я нажимаю на эту ссылку на моем телефоне https://waze.com/ul?ll=48.8566969, 2.3514616 & navigate = yes

указатели:

есть на устройстве не установлен браузер. (только waze).

- в манифесте waze есть следующий фильтр намерений:

<intent-filter>
   <action android:name="android.intent.action.VIEW"/>
   <category android:name="android.intent.category.DEFAULT"/>
   <category android:name="android.intent.category.BROWSABLE"/>
   <data android:scheme="http"/>
   <data android:scheme="https"/>
   <data android:host="www.waze.com"/>
   <data android:host="waze.com"/>
   <data android:pathPattern="/ul.*"/>
</intent-filter>

поэтому не знаю, почему мой код не работает, однако, учитывая факт нажатия кнопки adb и link, я вижу, что намерение работает, когда только данные передаются без категории и действия , но я не знаю, как запустить намерение в java только с данными и без других свойств.

вопрос

как я могу запустить намерение из java только с строкой данных ? или если есть другое решение?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

здесь полный рабочий код согласно. 1 сначала создайте класс, как показано ниже

import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;

public class WazeClass{

    public static Context mContext;
    public static String address;
    public WazeClass(Context context,String waddress) {
        super();
        mContext = context;
        address = waddress;
    }



    public static class WazeShow extends AsyncTask<String,Void,Intent>
    {

        public WazeShow(Context applicationContext) {
            mContext = applicationContext;
        }

        @Override
        protected Intent doInBackground(String... strings) {
            String url = "https://www.waze.com/ul?ll=40.75889500%2C-73.98513100&navigate=yes&zoom=17";
            Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( url ) );
            return intent;
        }

        @Override
        protected void onPostExecute(Intent intent) {
            super.onPostExecute(intent);
            try
            {
                mContext.startActivity(intent);
            }
            catch ( ActivityNotFoundException ex  )
            {
                // If Waze is not installed, open it in Google Play:
                Intent playintent = new Intent( Intent.ACTION_VIEW, Uri.parse( "market://details?id=com.waze" ) );
                mContext.startActivity(intent);
            }

        }
    }
}

, затем вызовите фрагмент или активность из любого места, если вызов фрагмента использует getContext ();

new WazeClass.WazeShow(getApplicationContext()).execute("address");
0 голосов
/ 13 апреля 2020

Измените свое намерение, как показано ниже код

try
{

  String url = "https://www.waze.com/ul?ll=40.75889500%2C-73.98513100&navigate=yes&zoom=17";
  Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( url ) );
  startActivity( intent );
}
catch ( ActivityNotFoundException ex  )
{
  // If Waze is not installed, open it in Google Play:
  Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( "market://details?id=com.waze" ) );
  startActivity(intent);
}
...