<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How can i get lifetime Access Token in Dropbox API Support &amp; Feedback</title>
    <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735773#M32489</link>
    <description>&lt;P&gt;i have done with the code but im facing a problem with the redirected uri&lt;/P&gt;&lt;P&gt;in my situation and in my code i want the user after make oauth flow and done with it and get the access token then my app use this token to upload photo&lt;/P&gt;&lt;P&gt;i dont want the user to redirect to http site or somthing so now i got this error after setting the redirect uri to redirect user to my app&lt;/P&gt;&lt;P&gt;error 400 invalid redirect_uri. when response_type=code without PKCE,redirect_uri must start with "https://", unless its a localhost URI&lt;/P&gt;</description>
    <pubDate>Sat, 09 Dec 2023 11:01:50 GMT</pubDate>
    <dc:creator>Ghost Mjrm</dc:creator>
    <dc:date>2023-12-09T11:01:50Z</dc:date>
    <item>
      <title>How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734042#M32429</link>
      <description>&lt;P&gt;i have android app connected to my Dropbox folder using access token but every 4 hour should i edit my code and input the new access token is there any method to make the app working 24h without any interact from me&lt;/P&gt;&lt;P&gt;and fix the message that show access token error uploading to Dropbox: expired access token&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;uploadToDropbox&lt;/SPAN&gt;(File photoFile) {&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;(photoFile == &lt;SPAN&gt;null &lt;/SPAN&gt;|| !photoFile.exists()) {&lt;BR /&gt;        runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Error: Photo file does not exist"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        return;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    DbxRequestConfig config = DbxRequestConfig.&lt;SPAN&gt;newBuilder&lt;/SPAN&gt;(&lt;SPAN&gt;"Decamera"&lt;/SPAN&gt;).build()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    DbxClientV2 client = &lt;SPAN&gt;new &lt;/SPAN&gt;DbxClientV2(config&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;DROPBOX_ACCESS_TOKEN&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    try &lt;/SPAN&gt;{&lt;BR /&gt;        String remotePath = &lt;SPAN&gt;"/Decamera/" &lt;/SPAN&gt;+ photoFile.getName()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        try &lt;/SPAN&gt;(InputStream in = &lt;SPAN&gt;new &lt;/SPAN&gt;FileInputStream(photoFile)) {&lt;BR /&gt;            client.files().uploadBuilder(remotePath)&lt;BR /&gt;                    .withMode(WriteMode.&lt;SPAN&gt;ADD&lt;/SPAN&gt;)&lt;BR /&gt;                    .uploadAndFinish(in)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Photo uploaded to Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;&lt;BR /&gt;    } &lt;SPAN&gt;catch &lt;/SPAN&gt;(Exception e) {&lt;BR /&gt;        e.printStackTrace()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Error uploading to Dropbox: " &lt;/SPAN&gt;+ &lt;SPAN&gt;e&lt;/SPAN&gt;.getMessage()&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;private static final &lt;/SPAN&gt;String &lt;SPAN&gt;DROPBOX_ACCESS_TOKEN &lt;/SPAN&gt;= my access token&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 02 Dec 2023 10:57:36 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734042#M32429</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-02T10:57:36Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734049#M32430</link>
      <description>&lt;P&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;, There is no way to get non expiring access token. As discussed before, you need to use refresh token instead. Refresh token doesn't expire automatic, so you can use it more than 24 hours. &lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@41457EF40051AFF130FDBFE21B496926/emoticons/1f609.png" alt=":winking_face:" title=":winking_face:" /&gt; Use OAuth as Greg suggested there. Don't forget to set offline access.&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;</description>
      <pubDate>Sat, 02 Dec 2023 12:55:12 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734049#M32430</guid>
      <dc:creator>Здравко</dc:creator>
      <dc:date>2023-12-02T12:55:12Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734050#M32431</link>
      <description>Can you help me with that how can i edit my code to achieve that i‘m beginner and I don’t have that experience to do that so if you can give me the instructions step by step 🫡:rose:&lt;/img&gt;</description>
      <pubDate>Sat, 02 Dec 2023 12:59:51 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734050#M32431</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-02T12:59:51Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734056#M32432</link>
      <description>&lt;P&gt;You can take a look on the example &lt;A title="Example Android application" href="https://github.com/dropbox/dropbox-sdk-java/tree/v6.0.0/examples/android" target="_blank" rel="noopener"&gt;here&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Sat, 02 Dec 2023 14:35:54 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734056#M32432</guid>
      <dc:creator>Здравко</dc:creator>
      <dc:date>2023-12-02T14:35:54Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734195#M32435</link>
      <description>Do you have more resources I didn’t find this useful idk why but there is no offline or refresh token example</description>
      <pubDate>Sun, 03 Dec 2023 17:18:44 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734195#M32435</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-03T17:18:44Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734197#M32436</link>
      <description>&lt;P&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;, Be more careful when inspecting the code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;... there is no offline ...&lt;BR /&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Hm..&lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@9AD39CA637682E9616FBE31CDAF1B6C4/emoticons/1f914.png" alt=":thinking_face:" title=":thinking_face:" /&gt; Let's see where the OAuth starts &lt;A href="https://github.com/dropbox/dropbox-sdk-java/blob/v6.0.0/examples/android/src/main/java/com/dropbox/core/examples/android/internal/api/DropboxOAuthUtil.kt#L52" target="_blank" rel="noopener"&gt;here&lt;/A&gt; and what actually gets executed &lt;A href="https://github.com/dropbox/dropbox-sdk-java/blob/v6.0.0/android/src/main/java/com/dropbox/core/android/Auth.kt#L189" target="_blank" rel="noopener"&gt;here&lt;/A&gt;. 🧐 Are you still thinking "there is no offline"? &lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@FBF7D2AB59A0D6E861EBF6A36F93B7E2/emoticons/1f642.png" alt=":slightly_smiling_face:" title=":slightly_smiling_face:" /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;... or refresh token example&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Let's see where OAuth finish &lt;A href="https://github.com/dropbox/dropbox-sdk-java/blob/v6.0.0/examples/android/src/main/java/com/dropbox/core/examples/android/internal/api/DropboxOAuthUtil.kt#L83" target="_blank" rel="noopener"&gt;here&lt;/A&gt; and what actually it executes &lt;A href="https://github.com/dropbox/dropbox-sdk-java/blob/v6.0.0/android/src/main/java/com/dropbox/core/android/Auth.kt#L324" target="_blank" rel="noopener"&gt;here&lt;/A&gt;. Ahhh... where was this refresh token... &lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@41457EF40051AFF130FDBFE21B496926/emoticons/1f609.png" alt=":winking_face:" title=":winking_face:" /&gt;&lt;/P&gt;&lt;P&gt;Keep more attention on code reading.&lt;/P&gt;</description>
      <pubDate>Sun, 03 Dec 2023 17:39:39 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734197#M32436</guid>
      <dc:creator>Здравко</dc:creator>
      <dc:date>2023-12-03T17:39:39Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734208#M32437</link>
      <description>&lt;P&gt;aha yeah i don't know how you got there but its seem to me he is using kotlin not java but i will figure it out&lt;/P&gt;&lt;P&gt;thanks (:&lt;/P&gt;</description>
      <pubDate>Sun, 03 Dec 2023 18:41:50 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734208#M32437</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-03T18:41:50Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734212#M32438</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;aha yeah i don't know how you got there ...&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;It's the internals of same link, I posted before. Nothing new.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;... but its seem to me he is using kotlin not java but i will figure it out&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Kotlin is widely used as a Java replacement (it's definitely more powerful), so Dropbox does the same. Both of them are using the same JVM, so they are compatible and you can use Java while Dropbox Java SDK for Android is in fact not Java but Kotlin. Again, Kotlin and Java languages can be mixed troubleless (there are some small exceptions only, that don't affect you in the particular case).&lt;/P&gt;&lt;P&gt;Good luck. &lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@41457EF40051AFF130FDBFE21B496926/emoticons/1f609.png" alt=":winking_face:" title=":winking_face:" /&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 03 Dec 2023 18:53:45 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/734212#M32438</guid>
      <dc:creator>Здравко</dc:creator>
      <dc:date>2023-12-03T18:53:45Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735773#M32489</link>
      <description>&lt;P&gt;i have done with the code but im facing a problem with the redirected uri&lt;/P&gt;&lt;P&gt;in my situation and in my code i want the user after make oauth flow and done with it and get the access token then my app use this token to upload photo&lt;/P&gt;&lt;P&gt;i dont want the user to redirect to http site or somthing so now i got this error after setting the redirect uri to redirect user to my app&lt;/P&gt;&lt;P&gt;error 400 invalid redirect_uri. when response_type=code without PKCE,redirect_uri must start with "https://", unless its a localhost URI&lt;/P&gt;</description>
      <pubDate>Sat, 09 Dec 2023 11:01:50 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735773#M32489</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-09T11:01:50Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735774#M32490</link>
      <description>&lt;PRE&gt;&lt;SPAN&gt;this is my app code now look like&lt;BR /&gt;private static final &lt;/SPAN&gt;String &lt;SPAN&gt;DROPBOX_APP_KEY &lt;/SPAN&gt;= &lt;SPAN&gt;"secret"&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;private static final &lt;/SPAN&gt;String &lt;SPAN&gt;DROPBOX_APP_SECRET &lt;/SPAN&gt;= &lt;SPAN&gt;"secret"&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;private static final &lt;/SPAN&gt;String &lt;SPAN&gt;DROPBOX_REDIRECT_URI &lt;/SPAN&gt;= &lt;SPAN&gt;"decamera://auth-finish"&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;protected void &lt;/SPAN&gt;&lt;SPAN&gt;onCreate&lt;/SPAN&gt;(Bundle savedInstanceState) {&lt;BR /&gt;    &lt;SPAN&gt;super&lt;/SPAN&gt;.onCreate(savedInstanceState)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    setContentView(R.layout.&lt;SPAN&gt;activity_main&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;previewView &lt;/SPAN&gt;= findViewById(R.id.&lt;SPAN&gt;previewView&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    ImageButton captureButton = findViewById(R.id.&lt;SPAN&gt;captureButton&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    ImageButton leftCornerButton = findViewById(R.id.&lt;SPAN&gt;leftCornerButton&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;addressTextView &lt;/SPAN&gt;= findViewById(R.id.&lt;SPAN&gt;addressTextView&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;fusedLocationProviderClient &lt;/SPAN&gt;= LocationServices.&lt;SPAN&gt;getFusedLocationProviderClient&lt;/SPAN&gt;(&lt;SPAN&gt;this&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;geocoder &lt;/SPAN&gt;= &lt;SPAN&gt;new &lt;/SPAN&gt;Geocoder(&lt;SPAN&gt;this, &lt;/SPAN&gt;Locale.&lt;SPAN&gt;getDefault&lt;/SPAN&gt;())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    captureButton.setOnClickListener(&lt;SPAN&gt;this&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    leftCornerButton.setOnClickListener(&lt;SPAN&gt;new &lt;/SPAN&gt;View.OnClickListener() {&lt;BR /&gt;        &lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;public void &lt;/SPAN&gt;&lt;SPAN&gt;onClick&lt;/SPAN&gt;(View v) {&lt;BR /&gt;            initiateDropboxAuthorization()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;    })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;addressTextView&lt;/SPAN&gt;.setOnClickListener(&lt;SPAN&gt;new &lt;/SPAN&gt;View.OnClickListener() {&lt;BR /&gt;        &lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;public void &lt;/SPAN&gt;&lt;SPAN&gt;onClick&lt;/SPAN&gt;(View v) {&lt;BR /&gt;            showEditAddressDialog()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;    })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    if &lt;/SPAN&gt;(allPermissionsGranted()) {&lt;BR /&gt;        startCamera()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        getLastLocation()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;        ActivityCompat.&lt;SPAN&gt;requestPermissions&lt;/SPAN&gt;(&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;REQUIRED_CAMERA_PERMISSIONS&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;CAMERA_PERMISSION_REQUEST&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;// Initialize Dropbox access token if available&lt;BR /&gt;&lt;/SPAN&gt;    SharedPreferences prefs = getPreferences(Context.&lt;SPAN&gt;MODE_PRIVATE&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;DROPBOX_ACCESS_TOKEN &lt;/SPAN&gt;= prefs.getString(&lt;SPAN&gt;"dropboxAccessToken"&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;// Check if the app was opened with a Dropbox authorization callback&lt;BR /&gt;&lt;/SPAN&gt;    handleDropboxAuthorizationCallback(getIntent())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Override onNewIntent to handle the Dropbox authorization callback&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;protected void &lt;/SPAN&gt;&lt;SPAN&gt;onNewIntent&lt;/SPAN&gt;(Intent intent) {&lt;BR /&gt;    &lt;SPAN&gt;super&lt;/SPAN&gt;.onNewIntent(intent)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    handleDropboxAuthorizationCallback(intent)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;handleDropboxAuthorizationCallback&lt;/SPAN&gt;(Intent intent) {&lt;BR /&gt;    Uri data = intent.getData()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    if &lt;/SPAN&gt;(data != &lt;SPAN&gt;null &lt;/SPAN&gt;&amp;amp;&amp;amp; data.toString().startsWith(&lt;SPAN&gt;DROPBOX_REDIRECT_URI&lt;/SPAN&gt;)) {&lt;BR /&gt;        &lt;SPAN&gt;// Authorization successful, extract the authorization code&lt;BR /&gt;&lt;/SPAN&gt;        String code = data.getQueryParameter(&lt;SPAN&gt;"code"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;// Now, exchange the authorization code for an access token and refresh token&lt;BR /&gt;&lt;/SPAN&gt;        exchangeAuthorizationCodeForTokens(code)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;initiateDropboxAuthorization&lt;/SPAN&gt;() {&lt;BR /&gt;    &lt;SPAN&gt;// Construct the Dropbox authorization URL&lt;BR /&gt;&lt;/SPAN&gt;    String authorizationUrl = &lt;SPAN&gt;"https://www.dropbox.com/oauth2/authorize" &lt;/SPAN&gt;+&lt;BR /&gt;            &lt;SPAN&gt;"?client_id=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_APP_KEY &lt;/SPAN&gt;+&lt;BR /&gt;            &lt;SPAN&gt;"&amp;amp;response_type=code" &lt;/SPAN&gt;+&lt;BR /&gt;            &lt;SPAN&gt;"&amp;amp;token_access_type=offline" &lt;/SPAN&gt;+&lt;BR /&gt;            &lt;SPAN&gt;"&amp;amp;state=myState" &lt;/SPAN&gt;+  &lt;SPAN&gt;// Replace with your own state&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;"&amp;amp;redirect_uri=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_REDIRECT_URI&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;// Open the authorization URL in a web browser or WebView&lt;BR /&gt;&lt;/SPAN&gt;    Intent browserIntent = &lt;SPAN&gt;new &lt;/SPAN&gt;Intent(Intent.&lt;SPAN&gt;ACTION_VIEW&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Uri.&lt;SPAN&gt;parse&lt;/SPAN&gt;(authorizationUrl))&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    startActivity(browserIntent)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;}&lt;BR /&gt;&lt;SPAN&gt;private &lt;/SPAN&gt;String &lt;SPAN&gt;performPostRequest&lt;/SPAN&gt;(String requestUrl&lt;SPAN&gt;, &lt;/SPAN&gt;String urlParameters) {&lt;BR /&gt;    &lt;SPAN&gt;try &lt;/SPAN&gt;{&lt;BR /&gt;        URL url = &lt;SPAN&gt;new &lt;/SPAN&gt;URL(requestUrl)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        HttpURLConnection connection = (HttpURLConnection) url.openConnection()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        connection.setRequestMethod(&lt;SPAN&gt;"POST"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        connection.setRequestProperty(&lt;SPAN&gt;"Content-Type"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"application/x-www-form-urlencoded"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        connection.setRequestProperty(&lt;SPAN&gt;"Content-Length"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Integer.&lt;SPAN&gt;toString&lt;/SPAN&gt;(urlParameters.getBytes().&lt;SPAN&gt;length&lt;/SPAN&gt;))&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        connection.setDoOutput(&lt;SPAN&gt;true&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;// Write the request body&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;try &lt;/SPAN&gt;(DataOutputStream wr = &lt;SPAN&gt;new &lt;/SPAN&gt;DataOutputStream(connection.getOutputStream())) {&lt;BR /&gt;            wr.writeBytes(urlParameters)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            wr.flush()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;// Get the response&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;try &lt;/SPAN&gt;(InputStream is = connection.getInputStream()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;             BufferedReader rd = &lt;SPAN&gt;new &lt;/SPAN&gt;BufferedReader(&lt;SPAN&gt;new &lt;/SPAN&gt;InputStreamReader(is))) {&lt;BR /&gt;            StringBuilder response = &lt;SPAN&gt;new &lt;/SPAN&gt;StringBuilder()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            String line&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            while &lt;/SPAN&gt;((line = rd.readLine()) != &lt;SPAN&gt;null&lt;/SPAN&gt;) {&lt;BR /&gt;                response.append(line)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                response.append(&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;\r&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;            &lt;SPAN&gt;return &lt;/SPAN&gt;response.toString()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;    } &lt;SPAN&gt;catch &lt;/SPAN&gt;(Exception e) {&lt;BR /&gt;        Log.&lt;SPAN&gt;e&lt;/SPAN&gt;(&lt;SPAN&gt;"HTTP"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Error in HTTP request: " &lt;/SPAN&gt;+ e.getMessage())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        return null;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;}&lt;BR /&gt;&lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;exchangeAuthorizationCodeForTokens&lt;/SPAN&gt;(String code) {&lt;BR /&gt;    &lt;SPAN&gt;new &lt;/SPAN&gt;AsyncTask&amp;lt;String&lt;SPAN&gt;, &lt;/SPAN&gt;Void&lt;SPAN&gt;, &lt;/SPAN&gt;Void&amp;gt;() {&lt;BR /&gt;        &lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;protected &lt;/SPAN&gt;Void &lt;SPAN&gt;doInBackground&lt;/SPAN&gt;(String... params) {&lt;BR /&gt;            &lt;SPAN&gt;try &lt;/SPAN&gt;{&lt;BR /&gt;                String url = &lt;SPAN&gt;"https://api.dropbox.com/oauth2/token"&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                String requestBody = &lt;SPAN&gt;"code=" &lt;/SPAN&gt;+ params[&lt;SPAN&gt;0&lt;/SPAN&gt;] +&lt;BR /&gt;                        &lt;SPAN&gt;"&amp;amp;grant_type=authorization_code" &lt;/SPAN&gt;+&lt;BR /&gt;                        &lt;SPAN&gt;"&amp;amp;client_id=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_APP_KEY &lt;/SPAN&gt;+&lt;BR /&gt;                        &lt;SPAN&gt;"&amp;amp;client_secret=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_APP_SECRET &lt;/SPAN&gt;+&lt;BR /&gt;                        &lt;SPAN&gt;"&amp;amp;redirect_uri=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_REDIRECT_URI&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;// Perform the POST request and obtain the JSON response&lt;BR /&gt;&lt;/SPAN&gt;                String jsonResponse = performPostRequest(url&lt;SPAN&gt;, &lt;/SPAN&gt;requestBody)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;// Parse the JSON response to extract access and refresh tokens&lt;BR /&gt;&lt;/SPAN&gt;                JSONObject jsonObject = &lt;SPAN&gt;new &lt;/SPAN&gt;JSONObject(jsonResponse)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;DROPBOX_ACCESS_TOKEN &lt;/SPAN&gt;= jsonObject.getString(&lt;SPAN&gt;"access_token"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;// Save the Dropbox access token&lt;BR /&gt;&lt;/SPAN&gt;                SharedPreferences prefs = getPreferences(Context.&lt;SPAN&gt;MODE_PRIVATE&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                prefs.edit().putString(&lt;SPAN&gt;"dropboxAccessToken"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;DROPBOX_ACCESS_TOKEN&lt;/SPAN&gt;).apply()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            } &lt;SPAN&gt;catch &lt;/SPAN&gt;(Exception e) {&lt;BR /&gt;                e.printStackTrace()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;            &lt;SPAN&gt;return null;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;    }.execute(code)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;uploadToDropbox&lt;/SPAN&gt;(File photoFile) {&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;(photoFile == &lt;SPAN&gt;null &lt;/SPAN&gt;|| !photoFile.exists()) {&lt;BR /&gt;        runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Error: Photo file does not exist"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        return;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;(&lt;SPAN&gt;DROPBOX_ACCESS_TOKEN &lt;/SPAN&gt;== &lt;SPAN&gt;null&lt;/SPAN&gt;) {&lt;BR /&gt;        runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Error: Dropbox access token is null"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        return;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    DbxRequestConfig config = DbxRequestConfig.&lt;SPAN&gt;newBuilder&lt;/SPAN&gt;(&lt;SPAN&gt;"Decamera"&lt;/SPAN&gt;).build()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    DbxClientV2 client = &lt;SPAN&gt;new &lt;/SPAN&gt;DbxClientV2(config&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;DROPBOX_ACCESS_TOKEN&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    try &lt;/SPAN&gt;{&lt;BR /&gt;        String remotePath = &lt;SPAN&gt;"/Decamera/" &lt;/SPAN&gt;+ photoFile.getName()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        try &lt;/SPAN&gt;(InputStream in = &lt;SPAN&gt;new &lt;/SPAN&gt;FileInputStream(photoFile)) {&lt;BR /&gt;            client.files().uploadBuilder(remotePath)&lt;BR /&gt;                    .withMode(WriteMode.&lt;SPAN&gt;ADD&lt;/SPAN&gt;)&lt;BR /&gt;                    .uploadAndFinish(in)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Photo uploaded to Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;&lt;BR /&gt;    } &lt;SPAN&gt;catch &lt;/SPAN&gt;(Exception e) {&lt;BR /&gt;        e.printStackTrace()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Error uploading to Dropbox: " &lt;/SPAN&gt;+ &lt;SPAN&gt;e&lt;/SPAN&gt;.getMessage()&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;}&amp;nbsp;&lt;/PRE&gt;</description>
      <pubDate>Sat, 09 Dec 2023 11:04:56 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735774#M32490</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-09T11:04:56Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735775#M32491</link>
      <description>&lt;P&gt;this androidManifest.xml&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;&amp;lt;manifest &lt;/SPAN&gt;&lt;SPAN&gt;xmlns:&lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;="http://schemas.android.com/apk/res/android"&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;xmlns:&lt;/SPAN&gt;&lt;SPAN&gt;tools&lt;/SPAN&gt;&lt;SPAN&gt;="http://schemas.android.com/tools"&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;package&lt;/SPAN&gt;&lt;SPAN&gt;="com.example.decamera"&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;&amp;lt;!-- Permissions --&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;&amp;lt;uses-permission &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.permission.CAMERA" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    &amp;lt;uses-feature &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.hardware.location.gps" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    &amp;lt;uses-permission &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.permission.WRITE_EXTERNAL_STORAGE" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    &amp;lt;uses-permission &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.permission.ACCESS_FINE_LOCATION" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    &amp;lt;uses-permission &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.permission.ACCESS_COARSE_LOCATION" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    &amp;lt;uses-permission &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.permission.INTERNET" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;&amp;lt;!-- Features --&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;&amp;lt;uses-feature &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.hardware.camera" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    &amp;lt;application&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:allowBackup&lt;/SPAN&gt;&lt;SPAN&gt;="true"&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:icon&lt;/SPAN&gt;&lt;SPAN&gt;="@mipmap/logo"&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:label&lt;/SPAN&gt;&lt;SPAN&gt;="@string/app_name"&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:roundIcon&lt;/SPAN&gt;&lt;SPAN&gt;="@mipmap/logo_round"&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:supportsRtl&lt;/SPAN&gt;&lt;SPAN&gt;="true"&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:theme&lt;/SPAN&gt;&lt;SPAN&gt;="@style/Theme.DeCamera"&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;tools&lt;/SPAN&gt;&lt;SPAN&gt;:targetApi&lt;/SPAN&gt;&lt;SPAN&gt;="31"&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;&amp;lt;!-- Activity for handling Dropbox authorization callback --&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;&amp;lt;activity&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;=".MainActivity"&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:exported&lt;/SPAN&gt;&lt;SPAN&gt;="true"&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;&amp;lt;!-- Intent filter for main activity --&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;&amp;lt;intent-filter&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                &amp;lt;action &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.intent.action.MAIN" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                &amp;lt;category &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.intent.category.LAUNCHER" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            &amp;lt;/intent-filter&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;&amp;lt;!-- Intent filter for handling Dropbox authorization redirect --&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;&amp;lt;intent-filter&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                &amp;lt;action &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.intent.action.VIEW" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                &amp;lt;category &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.intent.category.DEFAULT" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                &amp;lt;category &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:name&lt;/SPAN&gt;&lt;SPAN&gt;="android.intent.category.BROWSABLE" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                &amp;lt;data &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:scheme&lt;/SPAN&gt;&lt;SPAN&gt;="decamera" &lt;/SPAN&gt;&lt;SPAN&gt;android&lt;/SPAN&gt;&lt;SPAN&gt;:host&lt;/SPAN&gt;&lt;SPAN&gt;="auth-finish" &lt;/SPAN&gt;&lt;SPAN&gt;/&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            &amp;lt;/intent-filter&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        &amp;lt;/activity&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    &amp;lt;/application&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;/manifest&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 09 Dec 2023 11:06:12 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735775#M32491</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-09T11:06:12Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735789#M32493</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;error 400 invalid redirect_uri. when response_type=code &lt;U&gt;&lt;FONT color="#FF0000"&gt;without PKCE&lt;/FONT&gt;&lt;/U&gt;,redirect_uri must start with "https://", unless its a localhost URI&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;, you posted already the answer of your question (part of error message). To be able set scheme different than "https" (or similar) you need PKCE auth flow (something you skipped). &lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@41457EF40051AFF130FDBFE21B496926/emoticons/1f609.png" alt=":winking_face:" title=":winking_face:" /&gt; That's it - forget about app secret; focus on code challenge and code verifier (parts of PKCE).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PS: Why don't you use the SDK as is (including authentication) and skip re-implementing something already existing there? 🤷&lt;/P&gt;</description>
      <pubDate>Sat, 09 Dec 2023 13:50:31 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735789#M32493</guid>
      <dc:creator>Здравко</dc:creator>
      <dc:date>2023-12-09T13:50:31Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735792#M32494</link>
      <description>&lt;P&gt;yeah i have noticed it but honestly i don't know what PKCE mean but i will search about it&lt;/P&gt;&lt;P&gt;but im little bit confuse should i create a input key that can the user insert in it&amp;nbsp; the obtained access token to success the upload to dropbox operation or is there another way that the app automatically read it form the browser and use it&lt;/P&gt;&lt;P&gt;i already have this mechanism in my code but it dont know if it work&lt;/P&gt;&lt;P&gt;i told you im little bit confused and i don't get the complete idea or redirected url so i used ChatGPT To make to me this mechanism so can you please check my code if it good? &amp;gt;:&lt;/P&gt;&lt;P&gt;i just want when the user click on the corner button to start oAuth 2 operation and get access token then my app use this access token to upload the photo to dropbox&lt;/P&gt;&lt;P&gt;Best Regards&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 09 Dec 2023 13:58:44 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735792#M32494</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-09T13:58:44Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735813#M32497</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;i just want when the user click on the corner button to start oAuth 2 operation and get access token then my app use this access token to upload the photo to dropbox&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;If you get access token directly then this token will expire in 4 hours or so. So you go beck at the beginning.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;yeah i have noticed it but honestly i don't know what PKCE mean but i will search about it&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;PKCE is an alternative way to perform OAuth flow, nothing more. Instead of using app secret, dynamic pair of keys is used (code challenge and code verifier). One is passed in OAuth initiation and other in token receiving (something that guarantees avoid "man in middle" - the same thing what app secret does - just more secure way). 🤫 That's it.&lt;/P&gt;&lt;P&gt;As the message shows, your code is erroneous. You don't need any additional "input key" (whatever it means). Don't rely on AI, but rather on your own intelligence and don't be lazy in reading documentation. &lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@41457EF40051AFF130FDBFE21B496926/emoticons/1f609.png" alt=":winking_face:" title=":winking_face:" /&gt;&lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@D88F213CAFB196B6AB70612B08AD9D31/emoticons/1f601.png" alt=":beaming_face_with_smiling_eyes:" title=":beaming_face_with_smiling_eyes:" /&gt; AI (of any kind) is NOT so intelligent yet (might become some day but not now).&lt;/P&gt;</description>
      <pubDate>Sat, 09 Dec 2023 16:07:59 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735813#M32497</guid>
      <dc:creator>Здравко</dc:creator>
      <dc:date>2023-12-09T16:07:59Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735843#M32498</link>
      <description>Ok bro thanks a lot</description>
      <pubDate>Sat, 09 Dec 2023 21:14:54 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/735843#M32498</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-09T21:14:54Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737533#M32551</link>
      <description>&lt;P&gt;there is my main code&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;public class &lt;/SPAN&gt;MainActivity &lt;SPAN&gt;extends &lt;/SPAN&gt;AppCompatActivity &lt;SPAN&gt;implements &lt;/SPAN&gt;View.OnClickListener {&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;private static final int &lt;/SPAN&gt;&lt;SPAN&gt;CAMERA_PERMISSION_REQUEST &lt;/SPAN&gt;= &lt;SPAN&gt;100&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private static final &lt;/SPAN&gt;String[] &lt;SPAN&gt;REQUIRED_CAMERA_PERMISSIONS &lt;/SPAN&gt;= &lt;SPAN&gt;new &lt;/SPAN&gt;String[]{Manifest.permission.&lt;SPAN&gt;CAMERA&lt;/SPAN&gt;}&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private static final &lt;/SPAN&gt;String &lt;SPAN&gt;DROPBOX_APP_KEY &lt;/SPAN&gt;= &lt;SPAN&gt;"hc2p6uj44p9pyoc"&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private static final &lt;/SPAN&gt;String &lt;SPAN&gt;DROPBOX_APP_SECRET &lt;/SPAN&gt;= &lt;SPAN&gt;"i cannot show this"&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private static final &lt;/SPAN&gt;String &lt;SPAN&gt;DROPBOX_REDIRECT_URI &lt;/SPAN&gt;= &lt;SPAN&gt;"https://auth-finish"&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;String &lt;SPAN&gt;DROPBOX_ACCESS_TOKEN &lt;/SPAN&gt;= &lt;SPAN&gt;null;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;PreviewView &lt;SPAN&gt;previewView&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;ImageCapture &lt;SPAN&gt;imageCapture&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;TextView &lt;SPAN&gt;addressTextView&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;ExecutorService &lt;SPAN&gt;cameraExecutor &lt;/SPAN&gt;= Executors.&lt;SPAN&gt;newSingleThreadExecutor&lt;/SPAN&gt;()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;FusedLocationProviderClient &lt;SPAN&gt;fusedLocationProviderClient&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;Geocoder &lt;SPAN&gt;geocoder&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;// Add latitude and longitude variables&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;private double &lt;/SPAN&gt;&lt;SPAN&gt;latitudeValue&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private double &lt;/SPAN&gt;&lt;SPAN&gt;longitudeValue&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;protected void &lt;/SPAN&gt;&lt;SPAN&gt;onCreate&lt;/SPAN&gt;(Bundle savedInstanceState) {&lt;BR /&gt;        &lt;SPAN&gt;super&lt;/SPAN&gt;.onCreate(savedInstanceState)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        setContentView(R.layout.&lt;SPAN&gt;activity_main&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;previewView &lt;/SPAN&gt;= findViewById(R.id.&lt;SPAN&gt;previewView&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        ImageButton captureButton = findViewById(R.id.&lt;SPAN&gt;captureButton&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        ImageButton leftCornerButton = findViewById(R.id.&lt;SPAN&gt;leftCornerButton&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;addressTextView &lt;/SPAN&gt;= findViewById(R.id.&lt;SPAN&gt;addressTextView&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;fusedLocationProviderClient &lt;/SPAN&gt;= LocationServices.&lt;SPAN&gt;getFusedLocationProviderClient&lt;/SPAN&gt;(&lt;SPAN&gt;this&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;geocoder &lt;/SPAN&gt;= &lt;SPAN&gt;new &lt;/SPAN&gt;Geocoder(&lt;SPAN&gt;this, &lt;/SPAN&gt;Locale.&lt;SPAN&gt;getDefault&lt;/SPAN&gt;())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        captureButton.setOnClickListener(&lt;SPAN&gt;this&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        leftCornerButton.setOnClickListener(&lt;SPAN&gt;new &lt;/SPAN&gt;View.OnClickListener() {&lt;BR /&gt;            &lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;public void &lt;/SPAN&gt;&lt;SPAN&gt;onClick&lt;/SPAN&gt;(View v) {&lt;BR /&gt;                initiateDropboxAuthorization()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;addressTextView&lt;/SPAN&gt;.setOnClickListener(&lt;SPAN&gt;new &lt;/SPAN&gt;View.OnClickListener() {&lt;BR /&gt;            &lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;public void &lt;/SPAN&gt;&lt;SPAN&gt;onClick&lt;/SPAN&gt;(View v) {&lt;BR /&gt;                showEditAddressDialog()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        if &lt;/SPAN&gt;(allPermissionsGranted()) {&lt;BR /&gt;            startCamera()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            getLastLocation()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;            ActivityCompat.&lt;SPAN&gt;requestPermissions&lt;/SPAN&gt;(&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;REQUIRED_CAMERA_PERMISSIONS&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;CAMERA_PERMISSION_REQUEST&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;&lt;BR /&gt;        &lt;SPAN&gt;// Initialize Dropbox access token if available&lt;BR /&gt;&lt;/SPAN&gt;        SharedPreferences prefs = getPreferences(Context.&lt;SPAN&gt;MODE_PRIVATE&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;DROPBOX_ACCESS_TOKEN &lt;/SPAN&gt;= prefs.getString(&lt;SPAN&gt;"dropboxAccessToken"&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;// Check if the app was opened with a Dropbox authorization callback&lt;BR /&gt;&lt;/SPAN&gt;        handleDropboxAuthorizationCallback(getIntent())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;// Override onNewIntent to handle the Dropbox authorization callback&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;protected void &lt;/SPAN&gt;&lt;SPAN&gt;onNewIntent&lt;/SPAN&gt;(Intent intent) {&lt;BR /&gt;        &lt;SPAN&gt;super&lt;/SPAN&gt;.onNewIntent(intent)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;// Log the received intent data for debugging&lt;BR /&gt;&lt;/SPAN&gt;        Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Received new intent: " &lt;/SPAN&gt;+ intent)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;// Extract and log the data URI&lt;BR /&gt;&lt;/SPAN&gt;        Uri data = intent.getData()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Intent data URI: " &lt;/SPAN&gt;+ data)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        if &lt;/SPAN&gt;(data != &lt;SPAN&gt;null &lt;/SPAN&gt;&amp;amp;&amp;amp; data.toString().startsWith(&lt;SPAN&gt;DROPBOX_REDIRECT_URI&lt;/SPAN&gt;)) {&lt;BR /&gt;            &lt;SPAN&gt;// Authorization successful, extract the authorization code&lt;BR /&gt;&lt;/SPAN&gt;            String code = data.getQueryParameter(&lt;SPAN&gt;"code"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;// Log the authorization code for debugging&lt;BR /&gt;&lt;/SPAN&gt;            Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Authorization Code: " &lt;/SPAN&gt;+ code)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;// Now, exchange the authorization code for an access token and refresh token&lt;BR /&gt;&lt;/SPAN&gt;            exchangeAuthorizationCodeForTokens(code)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;initiateDropboxAuthorization&lt;/SPAN&gt;() {&lt;BR /&gt;        &lt;SPAN&gt;// Construct the Dropbox authorization URL&lt;BR /&gt;&lt;/SPAN&gt;        String authorizationUrl = &lt;SPAN&gt;"https://www.dropbox.com/oauth2/authorize" &lt;/SPAN&gt;+&lt;BR /&gt;                &lt;SPAN&gt;"?client_id=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_APP_KEY &lt;/SPAN&gt;+&lt;BR /&gt;                &lt;SPAN&gt;"&amp;amp;response_type=code" &lt;/SPAN&gt;+&lt;BR /&gt;                &lt;SPAN&gt;"&amp;amp;token_access_type=offline" &lt;/SPAN&gt;+&lt;BR /&gt;                &lt;SPAN&gt;"&amp;amp;state=myState" &lt;/SPAN&gt;+  &lt;SPAN&gt;// Replace with your own state&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;"&amp;amp;redirect_uri=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_REDIRECT_URI&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;// Open the authorization URL in a web browser or WebView&lt;BR /&gt;&lt;/SPAN&gt;        Intent browserIntent = &lt;SPAN&gt;new &lt;/SPAN&gt;Intent(Intent.&lt;SPAN&gt;ACTION_VIEW&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Uri.&lt;SPAN&gt;parse&lt;/SPAN&gt;(authorizationUrl))&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        startActivity(browserIntent)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;    &lt;SPAN&gt;private &lt;/SPAN&gt;String &lt;SPAN&gt;performPostRequest&lt;/SPAN&gt;(String requestUrl&lt;SPAN&gt;, &lt;/SPAN&gt;String urlParameters) {&lt;BR /&gt;        &lt;SPAN&gt;try &lt;/SPAN&gt;{&lt;BR /&gt;            URL url = &lt;SPAN&gt;new &lt;/SPAN&gt;URL(requestUrl)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            HttpURLConnection connection = (HttpURLConnection) url.openConnection()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            connection.setRequestMethod(&lt;SPAN&gt;"POST"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            connection.setRequestProperty(&lt;SPAN&gt;"Content-Type"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"application/x-www-form-urlencoded"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            connection.setRequestProperty(&lt;SPAN&gt;"Content-Length"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Integer.&lt;SPAN&gt;toString&lt;/SPAN&gt;(urlParameters.getBytes().&lt;SPAN&gt;length&lt;/SPAN&gt;))&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            connection.setDoOutput(&lt;SPAN&gt;true&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;// Log the request details&lt;BR /&gt;&lt;/SPAN&gt;            Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"POST Request URL: " &lt;/SPAN&gt;+ requestUrl)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"POST Request Body: " &lt;/SPAN&gt;+ urlParameters)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;// Write the request body&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;try &lt;/SPAN&gt;(DataOutputStream wr = &lt;SPAN&gt;new &lt;/SPAN&gt;DataOutputStream(connection.getOutputStream())) {&lt;BR /&gt;                wr.writeBytes(urlParameters)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                wr.flush()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;// Get the response&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;try &lt;/SPAN&gt;(InputStream is = connection.getInputStream()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                 BufferedReader rd = &lt;SPAN&gt;new &lt;/SPAN&gt;BufferedReader(&lt;SPAN&gt;new &lt;/SPAN&gt;InputStreamReader(is))) {&lt;BR /&gt;                StringBuilder response = &lt;SPAN&gt;new &lt;/SPAN&gt;StringBuilder()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                String line&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                while &lt;/SPAN&gt;((line = rd.readLine()) != &lt;SPAN&gt;null&lt;/SPAN&gt;) {&lt;BR /&gt;                    response.append(line)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                    response.append(&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;SPAN&gt;\r&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                }&lt;BR /&gt;&lt;BR /&gt;                &lt;SPAN&gt;// Log the response&lt;BR /&gt;&lt;/SPAN&gt;                Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"POST Response: " &lt;/SPAN&gt;+ response.toString())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                return &lt;/SPAN&gt;response.toString()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        } &lt;SPAN&gt;catch &lt;/SPAN&gt;(Exception e) {&lt;BR /&gt;            &lt;SPAN&gt;// Log any exceptions&lt;BR /&gt;&lt;/SPAN&gt;            Log.&lt;SPAN&gt;e&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Error in HTTP request: " &lt;/SPAN&gt;+ e.getMessage())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            return null;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;    }&lt;BR /&gt;    &lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;handleDropboxAuthorizationCallback&lt;/SPAN&gt;(Intent intent) {&lt;BR /&gt;        &lt;SPAN&gt;// Log the received intent for debugging&lt;BR /&gt;&lt;/SPAN&gt;        Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Handling Dropbox Authorization Callback Intent: " &lt;/SPAN&gt;+ intent)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        Uri data = intent.getData()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        if &lt;/SPAN&gt;(data != &lt;SPAN&gt;null &lt;/SPAN&gt;&amp;amp;&amp;amp; data.toString().startsWith(&lt;SPAN&gt;DROPBOX_REDIRECT_URI&lt;/SPAN&gt;)) {&lt;BR /&gt;            &lt;SPAN&gt;// Authorization successful, extract the authorization code&lt;BR /&gt;&lt;/SPAN&gt;            String code = data.getQueryParameter(&lt;SPAN&gt;"code"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;// Log the authorization code for debugging&lt;BR /&gt;&lt;/SPAN&gt;            Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Authorization Code: " &lt;/SPAN&gt;+ code)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;// Now, exchange the authorization code for an access token and refresh token&lt;BR /&gt;&lt;/SPAN&gt;            exchangeAuthorizationCodeForTokens(code)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;            &lt;SPAN&gt;// Log a message if the intent data is unexpected&lt;BR /&gt;&lt;/SPAN&gt;            Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Invalid Dropbox Authorization Callback Intent Data: " &lt;/SPAN&gt;+ data)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;exchangeAuthorizationCodeForTokens&lt;/SPAN&gt;(String code) {&lt;BR /&gt;        &lt;SPAN&gt;new &lt;/SPAN&gt;AsyncTask&amp;lt;String&lt;SPAN&gt;, &lt;/SPAN&gt;Void&lt;SPAN&gt;, &lt;/SPAN&gt;Void&amp;gt;() {&lt;BR /&gt;            &lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;protected &lt;/SPAN&gt;Void &lt;SPAN&gt;doInBackground&lt;/SPAN&gt;(String... params) {&lt;BR /&gt;                &lt;SPAN&gt;try &lt;/SPAN&gt;{&lt;BR /&gt;                    String url = &lt;SPAN&gt;"https://api.dropbox.com/oauth2/token"&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                    String requestBody = &lt;SPAN&gt;"code=" &lt;/SPAN&gt;+ params[&lt;SPAN&gt;0&lt;/SPAN&gt;] +&lt;BR /&gt;                            &lt;SPAN&gt;"&amp;amp;grant_type=authorization_code" &lt;/SPAN&gt;+&lt;BR /&gt;                            &lt;SPAN&gt;"&amp;amp;client_id=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_APP_KEY &lt;/SPAN&gt;+&lt;BR /&gt;                            &lt;SPAN&gt;"&amp;amp;client_secret=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_APP_SECRET &lt;/SPAN&gt;+&lt;BR /&gt;                            &lt;SPAN&gt;"&amp;amp;redirect_uri=" &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_REDIRECT_URI&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                    &lt;SPAN&gt;// Log the request details&lt;BR /&gt;&lt;/SPAN&gt;                    Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Token Exchange Request URL: " &lt;/SPAN&gt;+ url)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                    Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Token Exchange Request Body: " &lt;/SPAN&gt;+ requestBody)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                    &lt;SPAN&gt;// Perform the POST request and obtain the JSON response&lt;BR /&gt;&lt;/SPAN&gt;                    String jsonResponse = performPostRequest(url&lt;SPAN&gt;, &lt;/SPAN&gt;requestBody)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                    &lt;SPAN&gt;// Log the response&lt;BR /&gt;&lt;/SPAN&gt;                    Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Token Exchange Response: " &lt;/SPAN&gt;+ jsonResponse)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                    &lt;SPAN&gt;// Parse the JSON response to extract access and refresh tokens&lt;BR /&gt;&lt;/SPAN&gt;                    JSONObject jsonObject = &lt;SPAN&gt;new &lt;/SPAN&gt;JSONObject(jsonResponse)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                    &lt;SPAN&gt;DROPBOX_ACCESS_TOKEN &lt;/SPAN&gt;= jsonObject.getString(&lt;SPAN&gt;"access_token"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                    &lt;SPAN&gt;// Log the obtained access token&lt;BR /&gt;&lt;/SPAN&gt;                    Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Access Token Obtained: " &lt;/SPAN&gt;+ &lt;SPAN&gt;DROPBOX_ACCESS_TOKEN&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                    &lt;SPAN&gt;// Save the Dropbox access token&lt;BR /&gt;&lt;/SPAN&gt;                    SharedPreferences prefs = getPreferences(Context.&lt;SPAN&gt;MODE_PRIVATE&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                    prefs.edit().putString(&lt;SPAN&gt;"dropboxAccessToken"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;DROPBOX_ACCESS_TOKEN&lt;/SPAN&gt;).apply()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;                } &lt;SPAN&gt;catch &lt;/SPAN&gt;(Exception e) {&lt;BR /&gt;                    &lt;SPAN&gt;// Log any exceptions&lt;BR /&gt;&lt;/SPAN&gt;                    Log.&lt;SPAN&gt;e&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Error in token exchange: " &lt;/SPAN&gt;+ e.getMessage())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                }&lt;BR /&gt;                &lt;SPAN&gt;return null;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        }.execute(code)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;uploadToDropbox&lt;/SPAN&gt;(File photoFile) {&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;(photoFile == &lt;SPAN&gt;null &lt;/SPAN&gt;|| !photoFile.exists()) {&lt;BR /&gt;        runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Error: Photo file does not exist"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        return;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;(&lt;SPAN&gt;DROPBOX_ACCESS_TOKEN &lt;/SPAN&gt;== &lt;SPAN&gt;null&lt;/SPAN&gt;) {&lt;BR /&gt;        runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Error: Dropbox access token is null"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        return;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    DbxRequestConfig config = DbxRequestConfig.&lt;SPAN&gt;newBuilder&lt;/SPAN&gt;(&lt;SPAN&gt;"Decamera"&lt;/SPAN&gt;).build()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    DbxClientV2 client = &lt;SPAN&gt;new &lt;/SPAN&gt;DbxClientV2(config&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;DROPBOX_ACCESS_TOKEN&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    try &lt;/SPAN&gt;{&lt;BR /&gt;        String remotePath = &lt;SPAN&gt;"/Decamera/" &lt;/SPAN&gt;+ photoFile.getName()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        try &lt;/SPAN&gt;(InputStream in = &lt;SPAN&gt;new &lt;/SPAN&gt;FileInputStream(photoFile)) {&lt;BR /&gt;            FileMetadata metadata = client.files().uploadBuilder(remotePath)&lt;BR /&gt;                    .withMode(WriteMode.&lt;SPAN&gt;ADD&lt;/SPAN&gt;)&lt;BR /&gt;                    .uploadAndFinish(in)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            runOnUiThread(() -&amp;gt; {&lt;BR /&gt;                Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Photo uploaded to Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;// Log metadata information&lt;BR /&gt;&lt;/SPAN&gt;                Log.&lt;SPAN&gt;d&lt;/SPAN&gt;(&lt;SPAN&gt;"Dropbox"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"File uploaded. Metadata: " &lt;/SPAN&gt;+ &lt;SPAN&gt;metadata&lt;/SPAN&gt;.toString())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;&lt;BR /&gt;    } &lt;SPAN&gt;catch &lt;/SPAN&gt;(Exception e) {&lt;BR /&gt;        e.printStackTrace()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        runOnUiThread(() -&amp;gt; Toast.&lt;SPAN&gt;makeText&lt;/SPAN&gt;(MainActivity.&lt;SPAN&gt;this, &lt;/SPAN&gt;&lt;SPAN&gt;"Error uploading to Dropbox: " &lt;/SPAN&gt;+ &lt;SPAN&gt;e&lt;/SPAN&gt;.getMessage()&lt;SPAN&gt;, &lt;/SPAN&gt;Toast.&lt;SPAN&gt;LENGTH_SHORT&lt;/SPAN&gt;).show())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;}&lt;/PRE&gt;</description>
      <pubDate>Sat, 16 Dec 2023 16:33:13 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737533#M32551</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-16T16:33:13Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737540#M32552</link>
      <description>&lt;P&gt;Hm..&lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@9AD39CA637682E9616FBE31CDAF1B6C4/emoticons/1f914.png" alt=":thinking_face:" title=":thinking_face:" /&gt; Are you still trying some sort of AI? 🧐 &lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;, come on... &lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@D88F213CAFB196B6AB70612B08AD9D31/emoticons/1f601.png" alt=":beaming_face_with_smiling_eyes:" title=":beaming_face_with_smiling_eyes:" /&gt; I believe you have your own; use it! &lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@41457EF40051AFF130FDBFE21B496926/emoticons/1f609.png" alt=":winking_face:" title=":winking_face:" /&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 16 Dec 2023 16:44:08 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737540#M32552</guid>
      <dc:creator>Здравко</dc:creator>
      <dc:date>2023-12-16T16:44:08Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737546#M32553</link>
      <description>&lt;P&gt;im not using ai just to copy paste its help to understand the main code to how to exchange authorized code with access token using the app key and app secret and teach me to constructor the link and make post and request method im not using it blindly and its help to create log statments to dedicate the error in the logcat its a powerful but at the end i got upload to dropbox success message but and im 100% sure that the Decamera folder name is correct and app key app secret correct so where is the problem i cannot find it&lt;/P&gt;</description>
      <pubDate>Sat, 16 Dec 2023 17:32:58 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737546#M32553</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-16T17:32:58Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737547#M32554</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://www.dropboxforum.com/t5/user/viewprofilepage/user-id/1770682"&gt;@Ghost Mjrm&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;... so where is the problem i cannot find it&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Ah..🙋 If that's fine for you, you can use it in such a way, of course. In such a case you can remove the "offline" declaration for the access type since you're not using it in fact. So big part of entire discussion seems meaningless - you don't need long term access since the posted cover your demands. &lt;img class="lia-deferred-image lia-image-emoji" src="https://www.dropboxforum.com/html/@FBF7D2AB59A0D6E861EBF6A36F93B7E2/emoticons/1f642.png" alt=":slightly_smiling_face:" title=":slightly_smiling_face:" /&gt; Ok, all done.&lt;/P&gt;</description>
      <pubDate>Sat, 16 Dec 2023 17:43:05 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737547#M32554</guid>
      <dc:creator>Здравко</dc:creator>
      <dc:date>2023-12-16T17:43:05Z</dc:date>
    </item>
    <item>
      <title>Re: How can i get lifetime Access Token</title>
      <link>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737581#M32555</link>
      <description>Thank you for your support</description>
      <pubDate>Sun, 17 Dec 2023 09:18:39 GMT</pubDate>
      <guid>https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/How-can-i-get-lifetime-Access-Token/m-p/737581#M32555</guid>
      <dc:creator>Ghost Mjrm</dc:creator>
      <dc:date>2023-12-17T09:18:39Z</dc:date>
    </item>
  </channel>
</rss>

