【问题标题】:Does Uber SDK for android have an OnRideRequested method or something like that?Uber SDK for android 是否有 OnRideRequested 方法或类似的方法?
【发布时间】:2018-02-25 20:08:36
【问题描述】:

正如标题所说,我正在使用 android uber sdk 开发社区反犯罪应用程序。

我的应用正在使用 Uber SDK 来获取乘车服务,就像您从 Uber 一样,所以我想实现一个计时器,在每个确定的时间将用户位置发送给他的首选联系人。所以我的疑问是,有没有像“onRequestedRide”之类的方法可以使用?

我希望用户的应用程序请求搭车,并在他们确认和司机确认后,启动计时器以发送位置。

更新:

UberTracking.xml

<LinearLayout>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@android:color/black">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="request widget"
        android:textColor="@color/uber_white"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"/>

    <com.uber.sdk.android.rides.RideRequestButton
        android:id="@+id/uber_button_white"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        uber:ub__style="white" />

</RelativeLayout>

UberTracking.java

public class UberTracking extends AppCompatActivity implements RideRequestButtonCallback {

private static final String DROPOFF_ADDR = "One Embarcadero Center, San Francisco";
private static final Double DROPOFF_LAT = 37.795079;
private static final Double DROPOFF_LONG = -122.397805;
private static final String DROPOFF_NICK = "Embarcadero";
private static final String ERROR_LOG_TAG = "UberSDK-SampleActivity";
private static final String PICKUP_ADDR = "1455 Market Street, San Francisco";
private static final Double PICKUP_LAT = 37.775304;
private static final Double PICKUP_LONG = -122.417522;
private static final String PICKUP_NICK = "Uber HQ";
private static final String UBERX_PRODUCT_ID = "a1111c8c-c720-46c3-8534-2fcdd730040d";
private static final int WIDGET_REQUEST_CODE = 1234;

private static final String CLIENT_ID = BuildConfig.CLIENT_ID;
private static final String REDIRECT_URI = BuildConfig.REDIRECT_URI;
private static final String SERVER_TOKEN = BuildConfig.SERVER_TOKEN;

private SessionConfiguration configuration;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_uber_tracking);
    RideRequestButton uberButtonWhite = (RideRequestButton) findViewById(R.id.uber_button_white);


    configuration = new SessionConfiguration.Builder()
            .setRedirectUri(REDIRECT_URI)
            .setClientId(CLIENT_ID)
            .setServerToken(SERVER_TOKEN)
            .build();

    validateConfiguration(configuration);
    ServerTokenSession session = new ServerTokenSession(configuration);

    RideParameters rideParametersForProduct = new RideParameters.Builder()
            .setProductId(UBERX_PRODUCT_ID)
            .setPickupLocation(PICKUP_LAT, PICKUP_LONG, PICKUP_NICK, PICKUP_ADDR)
            .setDropoffLocation(DROPOFF_LAT, DROPOFF_LONG, DROPOFF_NICK, DROPOFF_ADDR)
            .build();

    RideRequestButtonCallback rideRequestButtonCallback = new RideRequestButtonCallback() {
        @Override
        public void onRideInformationLoaded() {
            Toast.makeText(UberTracking.this, "DAMN GOD", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(ApiError apiError) {
            Toast.makeText(UberTracking.this, apiError.getClientErrors().get(0).getTitle(), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(Throwable throwable) {
            Log.e("SampleActivity", "Error obtaining Metadata", throwable);
            Toast.makeText(UberTracking.this, "Connection error", Toast.LENGTH_LONG).show();
        }

    };

    // This button demonstrates launching the RideRequestActivity (customized button behavior).
    // You can optionally setRideParameters for pre-filled pickup and dropoff locations.
    RideRequestActivityBehavior rideRequestActivityBehavior = new RideRequestActivityBehavior(this,
            WIDGET_REQUEST_CODE, configuration);
    uberButtonWhite.setRequestBehavior(rideRequestActivityBehavior);
    uberButtonWhite.setRideParameters(rideParametersForProduct);
    uberButtonWhite.setSession(session);
    uberButtonWhite.setCallback(rideRequestButtonCallback);
    uberButtonWhite.loadRideInformation();



}



@Override
public void onRideInformationLoaded() {
    Toast.makeText(this, "Estimates have been refreshed", Toast.LENGTH_LONG).show();

}

@Override
public void onError(ApiError apiError) {
    Toast.makeText(this, apiError.getClientErrors().get(0).getTitle(), Toast.LENGTH_LONG).show();

}

@Override
public void onError(Throwable throwable) {
    Log.e("SampleActivity", "Error obtaining Metadata", throwable);
    Toast.makeText(this, "Connection error", Toast.LENGTH_LONG).show();
}

/**
 * Validates the local variables needed by the Uber SDK used in the sample project
 * @param configuration
 */
private void validateConfiguration(SessionConfiguration configuration) {
    String nullError = "%s must not be null";
    String sampleError = "Please update your %s in the gradle.properties of the project before " +
            "using the Uber SDK Sample app. For a more secure storage location, " +
            "please investigate storing in your user home gradle.properties ";

    checkNotNull(configuration, String.format(nullError, "SessionConfiguration"));
    checkNotNull(configuration.getClientId(), String.format(nullError, "Client ID"));
    checkNotNull(configuration.getRedirectUri(), String.format(nullError, "Redirect URI"));
    checkNotNull(configuration.getServerToken(), String.format(nullError, "Server Token"));
    checkState(!configuration.getClientId().equals("insert_your_client_id_here"),
            String.format(sampleError, "Client ID"));
    checkState(!configuration.getRedirectUri().equals("insert_your_redirect_uri_here"),
            String.format(sampleError, "Redirect URI"));
    checkState(!configuration.getRedirectUri().equals("insert_your_server_token_here"),
            String.format(sampleError, "Server Token"));
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == WIDGET_REQUEST_CODE && resultCode == Activity.RESULT_CANCELED && data != null) {
        if (data.getSerializableExtra(RideRequestActivity.AUTHENTICATION_ERROR) != null) {
            AuthenticationError error = (AuthenticationError) data.getSerializableExtra(RideRequestActivity
                    .AUTHENTICATION_ERROR);
            Toast.makeText(UberTracking.this, "Auth error " + error.name(), Toast.LENGTH_SHORT).show();
            Log.d(ERROR_LOG_TAG, "Error occurred during authentication: " + error.toString
                    ().toLowerCase());
        } else if (data.getSerializableExtra(RideRequestActivity.RIDE_REQUEST_ERROR) != null) {
            RideRequestViewError error = (RideRequestViewError) data.getSerializableExtra(RideRequestActivity
                    .RIDE_REQUEST_ERROR);
            Toast.makeText(UberTracking.this, "RideRequest error " + error.name(), Toast.LENGTH_SHORT).show();
            Log.d(ERROR_LOG_TAG, "Error occurred in the Ride Request Widget: " + error.toString().toLowerCase());
        }
    }
}

}

【问题讨论】:

    标签: java android uber-api


    【解决方案1】:

    您可以将会话添加到您的请求按钮,并为您的目的设置一个回调函数。 这个解释得很好,举个例子here

    祝你好运!

    【讨论】:

    • 嗨,Prateek,感谢您的快速回答,我尝试了您为我提供的虚拟吐司的实现,它在应用程序开始时抛出吐司,而不是在旅行开始时,做你知道我做错了什么吗?我用我的代码更新了我的初始帖子。
    • 我不是这个SDK的专家,但是这段代码不应该在RequestButton的onClick()方法中,而不是在onCreate()方法中吗? onCreate() 在应用启动时执行,这将解释您在应用中看到的症状。
    • 嗨 Prateek,如果我添加一个 onClickListener 应用程序不会打开小部件,它只会显示虚拟吐司,还有其他想法吗?
    • 您对文本的位置是正确的。经过一番搜索,您现在似乎必须为此深度链接到 Uber 应用程序。有一个与您类似的问题:github.com/uber/rides-android-sdk/issues/57
    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多