2015-09-20 9 views
7

मैं इस समुदाय में नए कर रहा हूँ, लेकिन मैं पहले से ही आप से ज्यादा जानने के लिए प्रयोग किया जाता है! असल में मैंने एंड्रॉइड स्टूडियो पर प्रोग्रामिंग शुरू की लेकिन अब मैं कहीं अटक गया। मुझे यकीन है कि यह कुछ आसान है जो आप जल्दी से पता लगाएंगे।LocationManager: java.lang.NoSuchMethodError

लेकिन एम्यूलेटर नेक्सस 5 एपीआई 23 (एक पहले से ही एंड्रॉयड स्टूडियो में स्थापित) यह काम कर रहा में अपने मोबाइल एंड्रॉयड 5.1.1 एपीआई 22 पर इसे शुरू doensnt।

त्रुटि: 09-20 19:15:11.526 17776-17776/com.example.stefano.aiutomamma01 E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.stefano.aiutomamma01, PID: 17776 java.lang.NoSuchMethodError: No virtual method checkSelfPermission(Ljava/lang/String;)I in class Lcom/example/stefano/aiutomamma01/MainActivity; or its super classes (declaration of 'com.example.stefano.aiutomamma01.MainActivity' appears in /data/app/com.example.stefano.aiutomamma01-2/base.apk) at com.example.stefano.aiutomamma01.MainActivity.onCreate(MainActivity.java:28) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442) at android.app.ActivityThread.access$800(ActivityThread.java:156) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:211) at android.app.ActivityThread.main(ActivityThread.java:5373) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

जावा कोड:

package com.example.stefano.aiutomamma01; 

import android.Manifest; 
import android.content.Context; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity implements LocationListener { 

    //GPS 
    private LocationManager locationManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //GPS 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     //CATCHED 
     if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // public void requestPermissions(@NonNull String[] permissions, int requestCode) 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for Activity#requestPermissions for more details. 
      return; 
     } 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 


    //GPS 
    @Override 
    public void onLocationChanged(Location location) { 

     String str = "Latitude: " + location.getLatitude() + "Longitude: " + location.getLongitude(); 

     Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show(); 

    } 

    //GPS 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    //GPS 
    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    //GPS 
    @Override 
    public void onProviderDisabled(String provider) { 

    } 

} 

बुरा पद के लिए खेद है। Btw: मैं वेब में समाधान खोजने के ...

अभिवादन

+0

रनटाइम अनुमतियाँ एपीआई 23 तरीकों जो उनके निपटने के लिए उपयोग किया जाता है के रूप में ही में शुरू किए गए थे। पिछली संगत फैशन में इसे संभालने के लिए ['ActivityCompat'] (http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html) कक्षा विधियों का उपयोग करें। –

उत्तर

18

रनटाइम अनुमतियाँ एपीआई 23 तरीकों जो उनके निपटने के लिए उपयोग किया जाता है के रूप में ही में पेश किए गए सके। पिछली संगत फैशन में इसे संभालने के लिए ActivityCompat क्लास विधियों का उपयोग करें।

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
    && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
    ... 
} 

और इसी तरह।

+0

धन्यवाद! अब यह काम कर रहा है। लेकिन एप्लिकेशन Google मानचित्र में स्थान की जांच नहीं कर रहा है। तुम जानते हो क्यों? –

+0

क्या आपके पास जीपीएस चालू है? क्या आप बाहर हैं? कोड ठीक लगता है। –

+0

मैं अंदर हूँ। लेकिन Google मानचित्र के साथ इसका काम। मुझे लगता है कि यह स्थान की जांच नहीं कर रहा है। मैं इसे बाहर आज़माएं। –

संबंधित मुद्दे