2017-03-03 3 views
0

私はユーザーの場所を検出するためのgoofenceアプリケーションを実装していますが、21以上のデバイスをサポートしていないため、すべてのデバイスでどのように実装するのですか。ユーザの位置をreceving、そこから更新をrecevingためデバイスバージョン21以降でアプリを実行しているときにエラーが発生しましたか?

MainActivity.java

 Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 

          if (location == null) { 
           LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, MainActivity.this); 

コード。
これは私の主なアクティビティクラスです。また、権限を追加してもエラーが表示されます。
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

Error:(100, 64) error: incompatible types: <anonymous ConnectionCallbacks> cannot be converted to Context. 
after implementing permission i get error like this. 

    Build:gradle(app) 


    apply plugin: 'com.android.application' 

     android { 
      compileSdkVersion 23 
      buildToolsVersion "25.0.2" 
      defaultConfig { 
       applicationId "com.example.barathkumarjt.geo" 
       minSdkVersion 14 
       targetSdkVersion 23 
       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 ('com.android.support:appcompat-v7:23.2.1'){ exclude module: 'support-v4' } 
      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:design:23.1.1' 
      compile'com.google.android.gms:play-services:8.4.0' 
      testCompile 'junit:junit:4.12' 
     } 

     Manifest file 

     <?xml version="1.0" encoding="utf-8"?> 
     <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.example.barathkumarjt.geo"> 
      <uses-permission android:name="android.permission.INTERNET" /> 
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

      <application 
       android:allowBackup="true" 
       android:icon="@mipmap/ic_launcher" 
       android:label="@string/app_name" 
       android:theme="@style/AppTheme.NoActionBar"> 
       <meta-data 
        android:name="com.google.android.gms.version" 
        android:value="@integer/google_play_services_version" /> 

       <activity 
        android:name=".MainActivity" 
        android:label="@string/app_name" > 
        <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 

         <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
       </activity> 

       <service android:name=".GeofenceTransitionsIntentService" android:exported="true" /> 
      </application> 
     </manifest> 
    Errors 

    E/AndroidRuntime: FATAL EXCEPTION: main 
         Process: com.example.barathkumarjt.geo, PID: 711 
         java.lang.SecurityException: Client must have ACCESS_FINE_LOCATION permission to request PRIORITY_HIGH_ACCURACY locations. 
          at android.os.Parcel.readException(Parcel.java:1683) 
          at android.os.Parcel.readException(Parcel.java:1636) 
          at com.google.android.gms.location.internal.zzi$zza$zza.zza(Unknown Source) 
          at com.google.android.gms.location.internal.zzk.zza(Unknown Source) 
          at com.google.android.gms.location.internal.zzl.zza(Unknown Source) 
          at com.google.android.gms.location.internal.zzd$1.zza(Unknown Source) 
          at com.google.android.gms.location.internal.zzd$1.zza(Unknown Source) 
          at com.google.android.gms.common.api.internal.zza$zza.zzb(Unknown Source) 
          at com.google.android.gms.common.api.internal.zzg.zza(Unknown Source) 
          at com.google.android.gms.common.api.internal.zzg.zzb(Unknown Source) 
          at com.google.android.gms.common.api.internal.zzl.zzb(Unknown Source) 
          at com.google.android.gms.common.api.internal.zzj.zzb(Unknown Source) 
          at com.google.android.gms.location.internal.zzd.requestLocationUpdates(Unknown Source) 
          at com.example.barathkumarjt.geo.MainActivity$1.onConnected(MainActivity.java:97) 
          at com.google.android.gms.common.internal.zzk.zzk(Unknown Source) 
          at com.google.android.gms.common.api.internal.zzj.zzi(Unknown Source) 
          at com.google.android.gms.common.api.internal.zzh.zzpx(Unknown Source) 
          at com.google.android.gms.common.api.internal.zzh.onConnected(Unknown Source) 
          at com.google.android.gms.common.api.internal.zzl.onConnected(Unknown Source) 
          at com.google.android.gms.common.api.internal.zzc.onConnected(Unknown Source) 
          at com.google.android.gms.common.internal.zzj$zzg.zzqL(Unknown Source) 
          at com.google.android.gms.common.internal.zzj$zza.zzc(Unknown Source) 
          at com.google.android.gms.common.internal.zzj$zza.zzw(Unknown Source) 
          at com.google.android.gms.common.internal.zzj$zzc.zzqN(Unknown Source) 
          at com.google.android.gms.common.internal.zzj$zzb.handleMessage(Unknown Source) 
          at android.os.Handler.dispatchMessage(Handler.java:102) 
          at android.os.Looper.loop(Looper.java:154) 
          at android.app.ActivityThread.main(ActivityThread.java:6077) 
          at java.lang.reflect.Method.invoke(Native Method) 
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

     My app is running on the device Api level 4.4.4 and while running on devices 21 and above the app is opening and get closed suddenly and i want to implement this app that support all devices please help me to implement it. 
     Thanks and help in advance! 

答えて

0

問題は、あなたがそのような行為を容易にするために、実行時のアクセス権を有効にする必要があるということです。

if (ContextCompat.checkSelfPermission(context, 
      Manifest.permission.ACCESS_FINE_LOCATION) 
    != PackageManager.PERMISSION_GRANTED) { 

     ActivityCompat.requestPermissions(thisActivity, 
      new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
      12000); 

} 

このページをお読みください :https://developer.android.com/training/permissions/requesting.html はアプリが見えるようになる。このチェックを実行し、

+0

変更対象も、アンドロイドのためのランタイムを追加.permission.ACCESS_COARSE_LOCATIONも同様です。 – Remario

+0

これをどのような用途に使用しているのですか(1200) –

+0

これはコールバックの識別子です – Remario

0
  1. まずコールcheckSelfPermission:許可が、その後付与されている場合

    は、他の場所
    をフェッチ、以下のステップ2に進みます。許可を

  2. 要求:

    int PERMISSION_REQ_LOCATION = 0100; 
    
    requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQ_LOCATION); 
    
  3. 上書き許可を求める後の結果をチェックするには、この方法:API 25に

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
        case PERMISSION_REQ_LOCATION: 
         //TODO fetch location 
         break; 
        default: 
         super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
        } 
    } 
    
関連する問題