android - एंड्रॉइड स्टूडियो में एचटीपी क्लाइंट आयात नहीं करेगा




android-studio android-gradle apache-httpclient-4.x (18)

मेरे पास एंड्रॉइड स्टूडियो में लिखा गया एक साधारण वर्ग है:

package com.mysite.myapp;

import org.apache.http.client.HttpClient;

public class Whatever {
    public void headBangingAgainstTheWallExample () {
        HttpClient client = new DefaultHttpClient();
    }
}

और इससे मुझे निम्नलिखित संकलन समय त्रुटि मिलती है:

Cannot resolve symbol HttpClient

एंड्रॉइड स्टूडियो एसडीके में HttpClient शामिल नहीं है? यहां तक ​​कि यदि यह नहीं है, तो मैंने इसे अपने ग्रैडल बिल्ड में जोड़ा है:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'org.apache.httpcomponents:httpclient:4.5'
}

अंतिम संकलन रेखा के साथ या बिना, त्रुटि वही है। मैं क्या खो रहा हूँ?


Answers

ApacheHttp क्लाइंट v23 sdk में हटा दिया गया है। आप HttpURLConnection या ओकेएचटीपी जैसे तृतीय पक्ष एचटीपी क्लाइंट का उपयोग कर सकते हैं।

रेफरी: https://developer.android.com/preview/behavior-changes.html#behavior-apache-http-client


बस इसका इस्तेमाल करें: -

android {
         .
         .
         .
 useLibrary 'org.apache.http.legacy'
         .
         .
         .
          }

एपीआई 22 में वे बहिष्कृत हो गए हैं और एपीआई 23 में उन्होंने उन्हें पूरी तरह से हटा दिया है, यदि आपको नए जोड़ों से सभी फैंसी सामानों की आवश्यकता नहीं है, तो एपीए 22 से पहले एकीकृत किए गए अपाचे से .jar फ़ाइलों का उपयोग करना है, लेकिन एक सरल कामकाज है, लेकिन अलग .jar फ़ाइलों के रूप में:

1. http://hc.apache.org/downloads.cgi
2. download httpclient 4.5.1, the zile file
3. unzip all files
4. drag in your project httpclient-4.5.1.jar, httpcore-4.4.3.jar and httpmime-4.5.1.jar
5. project, right click, open module settings, app, dependencies, +, File dependency and add the 3 files
6. now everything should compile properly

HttpClient को एसडीके 23 में अब और समर्थित नहीं है। आपको URLConnection का उपयोग URLConnection या sdk 22 में डाउनग्रेड करना होगा ( compile 'com.android.support:appcompat-v7:22.2.0' )

यदि आपको एसडीके 23 की आवश्यकता है, तो इसे अपने ग्रेडल में जोड़ें:

android {
    useLibrary 'org.apache.http.legacy'
}

आप सीधे अपनी परियोजना में OkHttp जार को डाउनलोड और शामिल करने का प्रयास कर सकते हैं या इसके बजाय OkHttp उपयोग कर OkHttp हैं


निर्भरता के तहत इन दो लाइनों को जोड़ें

compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'

फिर

useLibrary 'org.apache.http.legacy'

एंड्रॉइड के तहत


एक और तरीका यह है कि यदि आपके पास httpclient.jar फ़ाइल है तो आप यह कर सकते हैं:

अपनी परियोजना में "libs फ़ोल्डर" में अपनी .jar फ़ाइल पेस्ट करें। फिर धीरे-धीरे इस लाइन को अपने build.gradle में जोड़ें (मॉड्यूल: ऐप)

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.0.0'
compile files('libs/httpcore-4.3.3.jar')
}


एसडीके स्तर 23 के लिए अपाचे HTTP का उपयोग करने के लिए:

शीर्ष स्तर build.gradle - /build.gradle

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0' 
        // Lowest version for useLibrary is 1.3.0
        // Android Studio will notify you about the latest stable version
        // See all versions: http://jcenter.bintray.com/com/android/tools/build/gradle/
    }
    ...
}

क्रमिक अद्यतन के बारे में एंड्रॉइड स्टूडियो से अधिसूचना:

मॉड्यूल विशिष्ट build.gradle - /app/build.gradle

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    ...
    useLibrary 'org.apache.http.legacy'
    ...
}

यह मेरे लिए काम करने का प्रयास करें अपनी निर्भरता को अपनी build.gradle फ़ाइल में जोड़ें

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'

1- अपाचे जार फाइलें डाउनलोड करें (इस उत्तर के रूप में) 4.5.zip फ़ाइल से:
https://hc.apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F

2- ज़िप को अपने libs फ़ोल्डर में जार फ़ाइलों की प्रतिलिपि खोलें। यदि आप अपने प्रोजेक्ट के शीर्ष पर जाते हैं तो आप इसे पा सकते हैं, जहां यह "एंड्रॉइड" कहता है, जब आप इसे क्लिक करते हैं तो आपको एक सूची मिल जाएगी। इसलिए,

एंड्रॉइड -> परियोजना -> ऐप -> libs

, फिर वहाँ जार डाल दिया।

3- build.gradle (मॉड्यूल: ऐप) में जोड़ें

compile fileTree(dir: 'libs', include: ['*.jar'])

में

 dependency { 
   }

4- जावा वर्ग में इन आयातों को जोड़ें:

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.params.CoreProtocolPNames;

जैसा कि पहले बताया गया है, org.apache.http.client.HttpClient अब और समर्थित नहीं है:

एसडीके (एपीआई स्तर) # 23।

आपको java.net.HttpURLConnection का उपयोग java.net.HttpURLConnectionjava.net.HttpURLConnection

यदि आप HttpURLConnection का उपयोग करते समय अपना कोड (और जीवन) आसान बनाना चाहते हैं, तो यहां इस कक्षा का एक Wrapper है जो आपको JSON का उपयोग करके GET , POST और PUT साथ सरल संचालन JSON , उदाहरण के लिए, HTTP PUT कर रहा है।

HttpRequest request = new HttpRequest(API_URL + PATH).addHeader("Content-Type", "application/json");
int httpCode = request.put(new JSONObject().toString());
if (HttpURLConnection.HTTP_OK == httpCode) {
    response = request.getJSONObjectResponse();
} else {
  // log error
}
httpRequest.close()

इसका इस्तेमाल करने के लिए स्वतंत्र महसूस करें।

package com.calculistik.repository;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * <p>
 * Copyright © 2017, Calculistik . All rights reserved.
 * <p>
 * Oracle and Java are registered trademarks of Oracle and/or its
 * affiliates. Other names may be trademarks of their respective owners.
 * <p>
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common
 * Development and Distribution License("CDDL") (collectively, the
 * "License"). You may not use this file except in compliance with the
 * License. You can obtain a copy of the License at
 * https://netbeans.org/cddl-gplv2.html or
 * nbbuild/licenses/CDDL-GPL-2-CP. See the License for the specific
 * language governing permissions and limitations under the License.
 * When distributing the software, include this License Header
 * Notice in each file and include the License file at
 * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this particular file
 * as subject to the "Classpath" exception as provided by Oracle in the
 * GPL Version 2 section of the License file that accompanied this code. If
 * applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 * <p>
 * Contributor(s):
 * Created by alejandro tkachuk @aletkachuk
 * www.calculistik.com
 */
public class HttpRequest {

    public static enum Method {
        POST, PUT, DELETE, GET;
    }

    private URL url;
    private HttpURLConnection connection;
    private OutputStream outputStream;
    private HashMap<String, String> params = new HashMap<String, String>();

    public HttpRequest(String url) throws IOException {
        this.url = new URL(url);
        connection = (HttpURLConnection) this.url.openConnection();
    }

    public int get() throws IOException {
        return this.send();
    }

    public int post(String data) throws IOException {
        connection.setDoInput(true);
        connection.setRequestMethod(Method.POST.toString());
        connection.setDoOutput(true);
        outputStream = connection.getOutputStream();
        this.sendData(data);
        return this.send();
    }

    public int post() throws IOException {
        connection.setDoInput(true);
        connection.setRequestMethod(Method.POST.toString());
        connection.setDoOutput(true);
        outputStream = connection.getOutputStream();
        return this.send();
    }

    public int put(String data) throws IOException {
        connection.setDoInput(true);
        connection.setRequestMethod(Method.PUT.toString());
        connection.setDoOutput(true);
        outputStream = connection.getOutputStream();
        this.sendData(data);
        return this.send();
    }

    public int put() throws IOException {
        connection.setDoInput(true);
        connection.setRequestMethod(Method.PUT.toString());
        connection.setDoOutput(true);
        outputStream = connection.getOutputStream();
        return this.send();
    }

    public HttpRequest addHeader(String key, String value) {
        connection.setRequestProperty(key, value);
        return this;
    }

    public HttpRequest addParameter(String key, String value) {
        this.params.put(key, value);
        return this;
    }

    public JSONObject getJSONObjectResponse() throws JSONException, IOException {
        return new JSONObject(getStringResponse());
    }

    public JSONArray getJSONArrayResponse() throws JSONException, IOException {
        return new JSONArray(getStringResponse());
    }

    public String getStringResponse() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder response = new StringBuilder();
        for (String line; (line = br.readLine()) != null; ) response.append(line + "\n");
        return response.toString();
    }

    public byte[] getBytesResponse() throws IOException {
        byte[] buffer = new byte[8192];
        InputStream is = connection.getInputStream();
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        for (int bytesRead; (bytesRead = is.read(buffer)) >= 0; )
            output.write(buffer, 0, bytesRead);
        return output.toByteArray();
    }

    public void close() {
        if (null != connection)
            connection.disconnect();
    }

    private int send() throws IOException {
        int httpStatusCode = HttpURLConnection.HTTP_BAD_REQUEST;

        if (!this.params.isEmpty()) {
            this.sendData();
        }
        httpStatusCode = connection.getResponseCode();

        return httpStatusCode;
    }

    private void sendData() throws IOException {
        StringBuilder result = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            result.append((result.length() > 0 ? "&" : "") + entry.getKey() + "=" + entry.getValue());//appends: key=value (for first param) OR &key=value(second and more)
        }
        sendData(result.toString());
    }

    private HttpRequest sendData(String query) throws IOException {
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
        writer.write(query);
        writer.close();
        return this;
    }

}

आपके प्रोजेक्ट में आपके पास कौन सा एपीआई लक्ष्य है? AndroidHttpClient केवल API स्तर 8 के लिए है <। और कृपया यहां एक नज़र डालें

अपने कोड का आनंद लें :)


मुझे लगता है कि आपके एंड्रॉइड स्टूडियो संस्करण के आधार पर, यह महत्वपूर्ण है कि आप अपने एंड्रॉइड स्टूडियो को भी अपडेट करें, मैं भी हर किसी की सलाह के बाद निराश हो रहा था लेकिन कोई भाग्य नहीं था, जब तक कि मुझे अपने एंड्रॉइड संस्करण को 1.3 से 1.5 तक अपग्रेड नहीं करना पड़ा, त्रुटियां गायब हो गईं जादू।


एंड्रॉइड 6.0 (एपीआई लेवल 23) रिलीज अपाचे HTTP क्लाइंट के लिए समर्थन हटा देता है। इसलिए आप इस पुस्तकालय का उपयोग सीधे एपीआई 23 में नहीं कर सकते हैं। लेकिन इसका उपयोग करने का एक तरीका है। अपने build.gradle फ़ाइल में नीचे लाइब्रेरी 'org.apache.http.legacy' का उपयोग करें-

android {
    useLibrary 'org.apache.http.legacy'
}

यदि यह काम नहीं करता है तो आप निम्न हैक-

- org.apache.http.legacy.jar कॉपी करें जो आपके प्रोजेक्ट के ऐप / libs फ़ोल्डर में आपके एंड्रॉइड एसडीके निर्देशिका के / प्लेटफॉर्म / एंड्रॉइड -23 / वैकल्पिक पथ में है।

- अब build.gradle फ़ाइल के निर्भरता {} अनुभाग के अंदर संकलित फ़ाइलें ('libs / org.apache.http.legacy.jar') जोड़ें।


त्रुटि: (30, 0) ग्रैडल डीएसएल विधि नहीं मिली: 'classpath ()' संभावित कारण:

  • प्रोजेक्ट 'सीआईडी' एंड्रॉइड ग्रैडल प्लग-इन के एक संस्करण का उपयोग कर रहा है जिसमें विधि नहीं है (उदाहरण के लिए 'testCompile' 1.1.0 में जोड़ा गया था)। संस्करण 2.3.3 में प्लगइन अपग्रेड करें और सिंक प्रोजेक्ट
  • प्रोजेक्ट 'सीआईडी' ग्रैडल के एक संस्करण का उपयोग कर रहा है जिसमें विधि नहीं है। ओपन ग्रैडल रैपर फ़ाइल
  • बिल्ड फ़ाइल में एक ग्रैडल प्लगइन गायब हो सकता है। ग्रैडल प्लगइन लागू करें

  • आपको केवल एक पंक्ति जोड़नी है

    useLibrary 'org.apache.http.legacy'
    

    build.gradle (मॉड्यूल: ऐप) में, उदाहरण के लिए

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 24
        buildToolsVersion "25.0.0"
    
        useLibrary 'org.apache.http.legacy'
    
        defaultConfig {
            applicationId "com.avenues.lib.testotpappnew"
            minSdkVersion 15
            targetSdkVersion 24
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:24.2.1'
        testCompile 'junit:junit:4.12'
    }
    

    यदि आपको एसडीके 23 की आवश्यकता है, तो इसे अपने ग्रेडल में जोड़ें:

    android {
        useLibrary 'org.apache.http.legacy'
    }
    

    अंतिम अपडेट: 6/2/15

    एक अद्वितीय आईडी बनाने के बारे में प्रत्येक स्टैक ओवरफ़्लो पोस्ट पढ़ने के बाद, Google डेवलपर ब्लॉग और एंड्रॉइड दस्तावेज़, मुझे लगता है कि 'छद्म आईडी' सबसे अच्छा संभव विकल्प है।

    मुख्य मुद्दा: हार्डवेयर बनाम सॉफ्टवेयर

    हार्डवेयर

    • उपयोगकर्ता अपने हार्डवेयर, एंड्रॉइड टैबलेट या फोन को बदल सकते हैं, इसलिए हार्डवेयर के आधार पर अद्वितीय आईडी ट्रेकिंग यूजर के लिए अच्छे विचार नहीं हैं
    • ट्रैकिंग हार्डवेयर के लिए , यह एक अच्छा विचार है

    सॉफ्टवेयर

    • उपयोगकर्ता रूट होने पर अपने रोम को मिटा / बदल सकते हैं
    • आप प्लेटफार्मों (आईओएस, एंड्रॉइड, विंडोज़ और वेब) में उपयोगकर्ताओं को ट्रैक कर सकते हैं
    • सबसे अच्छा उपयोगकर्ता को उनकी सहमति के साथ एक व्यक्तिगत उपयोगकर्ता को ट्रैक करना है, बस उन्हें लॉगिन करना है (ओएथ का उपयोग करके यह निर्बाध बनाना)

    एंड्रॉइड के साथ कुल मिलाकर टूटना

    - एपीआई> = 9/10 (एंड्रॉइड डिवाइसों का 99.5%) के लिए गारंटी विशिष्टता (रूट डिवाइस शामिल हैं)

    - कोई अतिरिक्त अनुमति नहीं है

    Psuedo कोड:

    if API >= 9/10: (99.5% of devices)
    
    return unique ID containing serial id (rooted devices may be different)
    
    else
    
    return unique ID of build information (may overlap data - API < 9)
    

    हमारे सभी विकल्पों को पोस्ट करने के लिए @ स्टंसल्ट के लिए धन्यवाद (इस स्टैक ओवरफ़्लो प्रश्न में)।

    विकल्पों की सूची - कारणों का उपयोग क्यों नहीं करें:

    • उपयोगकर्ता ईमेल - सॉफ्टवेयर

    • उपयोगकर्ता फोन नंबर - सॉफ्टवेयर

      • उपयोगकर्ता फोन नंबर बदल सकते हैं - बेहद असंभव
      • <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    • आईएमईआई - हार्डवेयर (केवल फोन, जरूरत है android.permission.READ_PHONE_STATE )

      • अधिकांश उपयोगकर्ता इस तथ्य से नफरत करते हैं कि यह अनुमति में "फोन कॉल" कहता है। कुछ उपयोगकर्ता खराब रेटिंग देते हैं, क्योंकि उनका मानना ​​है कि आप बस अपनी व्यक्तिगत जानकारी चुरा रहे हैं, जब आप वास्तव में करना चाहते हैं तो ट्रैक डिवाइस इंस्टॉल है। यह स्पष्ट है कि आप डेटा एकत्र कर रहे हैं।
      • <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    • एंड्रॉइड आईडी - हार्डवेयर (शून्य हो सकता है, फ़ैक्टरी रीसेट पर बदल सकता है, रूट डिवाइस पर बदला जा सकता है)

      • चूंकि यह 'शून्य' हो सकता है, इसलिए हम 'शून्य' की जांच कर सकते हैं और इसके मूल्य को बदल सकते हैं, लेकिन इसका मतलब है कि यह अब अद्वितीय नहीं होगा।
      • यदि आपके पास फ़ैक्टरी रीसेट डिवाइस वाला कोई उपयोगकर्ता है, तो रूट रूट डिवाइस पर बदल या बदल सकता है, इसलिए यदि आप उपयोगकर्ता इंस्टॉल को ट्रैक कर रहे हैं तो डुप्लीकेट प्रविष्टियां हो सकती हैं।
    • डब्ल्यूएलएएन मैक पता - हार्डवेयर (जरूरत है android.permission.ACCESS_WIFI_STATE )

      • यह दूसरा सबसे अच्छा विकल्प हो सकता है, लेकिन आप अभी भी एक अद्वितीय पहचानकर्ता एकत्रित और संग्रहीत कर रहे हैं जो सीधे उपयोगकर्ता से आता है। यह स्पष्ट है कि आप डेटा एकत्र कर रहे हैं।
      • <uses-permission android:name="android.permission.ACCESS_WIFI_STATE "/>
    • ब्लूटूथ मैक पता - हार्डवेयर (ब्लूटूथ के साथ डिवाइस, जरूरत है android.permission.BLUETOOTH )

      • बाजार पर अधिकांश एप्लिकेशन ब्लूटूथ का उपयोग नहीं करते हैं, और इसलिए यदि आपका एप्लिकेशन ब्लूटूथ का उपयोग नहीं करता है और आप इसमें शामिल हैं, तो उपयोगकर्ता संदिग्ध हो सकता है।
      • <uses-permission android:name="android.permission.BLUETOOTH "/>
    • छद्म-अद्वितीय आईडी - सॉफ्टवेयर (सभी एंड्रॉइड डिवाइसों के लिए)

      • बहुत संभव है, टकराव हो सकता है - नीचे दी गई मेरी विधि देखें!
      • यह आपको निजी से कुछ भी लेने के बिना उपयोगकर्ता से 'लगभग अद्वितीय' आईडी प्राप्त करने की अनुमति देता है। आप डिवाइस की जानकारी से अपना अनाम आईडी बना सकते हैं।

    मुझे पता है कि अनुमतियों का उपयोग किये बिना एक अद्वितीय आईडी प्राप्त करने का कोई 'सही' तरीका नहीं है; हालांकि, कभी-कभी हमें केवल डिवाइस स्थापना को ट्रैक करने की आवश्यकता होती है। जब एक अद्वितीय आईडी बनाने की बात आती है, तो हम पूरी तरह से जानकारी के आधार पर एक 'छद्म अद्वितीय आईडी' बना सकते हैं जो एंड्रॉइड एपीआई अतिरिक्त अनुमतियों के बिना हमें देता है। इस तरह, हम उपयोगकर्ता सम्मान दिखा सकते हैं और एक अच्छा उपयोगकर्ता अनुभव भी प्रदान करने का प्रयास कर सकते हैं।

    एक छद्म-अद्वितीय आईडी के साथ, आप वास्तव में केवल इस तथ्य में भाग लेते हैं कि इस तरह के उपकरणों के आधार पर डुप्लिकेट हो सकते हैं। आप इसे अधिक अद्वितीय बनाने के लिए संयुक्त विधि को ट्विक कर सकते हैं; हालांकि, कुछ डेवलपर्स को डिवाइस इंस्टॉल को ट्रैक करने की आवश्यकता है और यह समान उपकरणों के आधार पर चाल या प्रदर्शन करेगा।

    एपीआई> = 9:

    यदि उनका एंड्रॉइड डिवाइस एपीआई 9 या उससे अधिक है, तो यह 'Build.SERIAL' फ़ील्ड के कारण अद्वितीय होने की गारंटी है।

    याद रखें , आप तकनीकी रूप से लगभग 0.5% उपयोगकर्ताओं के बारे में याद कर रहे हैं जिनके पास एपीआई <9 है । तो आप बाकी पर ध्यान केंद्रित कर सकते हैं: यह 99.5% उपयोगकर्ताओं का है!

    एपीआई <9:

    यदि उपयोगकर्ता का एंड्रॉइड डिवाइस एपीआई 9 से कम है; उम्मीद है कि उन्होंने फ़ैक्टरी रीसेट नहीं किया है और उनके 'सुरक्षित .ANDROID_ID' को संरक्षित किया जाएगा या नहीं 'शून्य'। ( http://developer.android.com/about/dashboards/index.html देखें)

    यदि सभी अन्य विफल होते हैं:

    यदि सब कुछ विफल हो जाता है, यदि उपयोगकर्ता एपीआई 9 (जिंजरब्रेड से कम) से कम है, तो अपने डिवाइस या 'सुरक्षित .ANDROID_ID' रिटर्न 'शून्य' को रीसेट कर दिया गया है, तो बस लौटाई गई आईडी पूरी तरह से उनके एंड्रॉइड डिवाइस की जानकारी के आधार पर होगी। यह वह जगह है जहां टक्कर हो सकती है।

    परिवर्तन:

    • फ़ैक्टरी रीसेट की वजह से 'Android.SECURE_ID' को हटाया गया मूल्य बदल सकता है
    • एपीआई पर बदलने के लिए कोड संपादित किया
    • छद्म बदल दिया

    कृपया नीचे दी गई विधि पर नज़र डालें:

    /**
     * Return pseudo unique ID
     * @return ID
     */
    public static String getUniquePsuedoID() {
        // If all else fails, if the user does have lower than API 9 (lower
        // than Gingerbread), has reset their device or 'Secure.ANDROID_ID'
        // returns 'null', then simply the ID returned will be solely based
        // off their Android device information. This is where the collisions
        // can happen.
        // Thanks http://www.pocketmagic.net/?p=1662!
        // Try not to use DISPLAY, HOST or ID - these items could change.
        // If there are collisions, there will be overlapping data
        String m_szDevIDShort = "35" + (Build.BOARD.length() % 10) + (Build.BRAND.length() % 10) + (Build.CPU_ABI.length() % 10) + (Build.DEVICE.length() % 10) + (Build.MANUFACTURER.length() % 10) + (Build.MODEL.length() % 10) + (Build.PRODUCT.length() % 10);
    
        // Thanks to @Roman SL!
        // https://.com/a/4789483/950427
        // Only devices with API >= 9 have android.os.Build.SERIAL
        // http://developer.android.com/reference/android/os/Build.html#SERIAL
        // If a user upgrades software or roots their device, there will be a duplicate entry
        String serial = null;
        try {
            serial = android.os.Build.class.getField("SERIAL").get(null).toString();
    
            // Go ahead and return the serial for api => 9
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            // String needs to be initialized
            serial = "serial"; // some value
        }
    
        // Thanks @Joe!
        // https://.com/a/2853253/950427
        // Finally, combine the values we have found by using the UUID class to create a unique identifier
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }
    

    नया (विज्ञापनों और Google Play सेवाओं वाले ऐप्स के लिए):

    Google Play डेवलपर के कंसोल से:

    1 अगस्त, 2014 की शुरुआत से, Google Play डेवलपर प्रोग्राम नीति के लिए किसी भी अन्य विज्ञापन प्रयोजनों के लिए किसी भी अन्य लगातार पहचानकर्ताओं के बदले विज्ञापन आईडी का उपयोग करने के लिए सभी नए ऐप अपलोड और अपडेट की आवश्यकता होती है। और अधिक जानें

    कार्यान्वयन :

    अनुमति:

    <uses-permission android:name="android.permission.INTERNET" />
    

    कोड:

    import com.google.android.gms.ads.identifier.AdvertisingIdClient;
    import com.google.android.gms.ads.identifier.AdvertisingIdClient.Info;
    import com.google.android.gms.common.GooglePlayServicesAvailabilityException;
    import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
    import java.io.IOException;
    ...
    
    // Do not call this function from the main thread. Otherwise, 
    // an IllegalStateException will be thrown.
    public void getIdThread() {
    
      Info adInfo = null;
      try {
        adInfo = AdvertisingIdClient.getAdvertisingIdInfo(mContext);
    
      } catch (IOException exception) {
        // Unrecoverable error connecting to Google Play services (e.g.,
        // the old version of the service doesn't support getting AdvertisingId).
    
      } catch (GooglePlayServicesAvailabilityException exception) {
        // Encountered a recoverable error connecting to Google Play services. 
    
      } catch (GooglePlayServicesNotAvailableException exception) {
        // Google Play services is not available entirely.
      }
      final String id = adInfo.getId();
      final boolean isLAT = adInfo.isLimitAdTrackingEnabled();
    }
    

    स्रोत / डॉक्स:

    http://developer.android.com/google/play-services/id.html http://developer.android.com/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.html

    जरूरी:

    इसका उद्देश्य यह है कि विज्ञापन आईडी विज्ञापन प्रयोजनों के लिए अन्य पहचानकर्ताओं के मौजूदा उपयोग को पूरी तरह से प्रतिस्थापित करती है (जैसे सेटिंग्स में सुरक्षित और एंड्रॉइड_आईडी का उपयोग)। Google Play सेवाएं उपलब्ध होने पर। जिन मामलों में Google Play सेवाएं अनुपलब्ध हैं, उन्हें Google PlayServicesNotAvailableException द्वारा GetAdvertisingIdInfo () द्वारा फेंक दिया जा रहा है।

    चेतावनी, उपयोगकर्ता रीसेट कर सकते हैं:

    http://en.kioskea.net/faq/34732-android-reset-your-advertising-id

    मैंने उन सभी लिंक को संदर्भित करने का प्रयास किया है जिनसे मैंने जानकारी ली है। यदि आप गायब हैं और शामिल होने की आवश्यकता है, तो कृपया टिप्पणी करें!

    Google प्लेयर सेवा इंस्टेंस आईडी

    https://developers.google.com/instance-id/





    android android-studio android-gradle apache-httpclient-4.x