2013-03-25 2 views
-1

Я создал переключатель для проверки того, что я хочу, чтобы мой сервис MyServices начал свой сервис ... В моем главном файле макета есть 3 кнопки, а при нажатии второй кнопки запускается моя активность UserStatus, и при переключении на эту активность есть startService() который я думаю, начинает MyService, когда отображаются тосты, которые я дал между ними. Теперь я намерен выполнять обнаружение геолокации в фоновом режиме, но я не знаю, почему геолокация не происходит, я сделал это, используя видео с youtubeКак я могу получить свое обнаружение gps?


Это является деятельность UserStatus

package com.salesforce.samples.templateapp; 


import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.CompoundButton; 
import android.widget.Switch; 
import android.widget.Toast; 
import android.widget.ToggleButton; 
import android.location.*; 
import android.content.Intent; 
public class UserStatus extends Activity { 

    ToggleButton statusToggle; 

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

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_user_status); 
     statusToggle=(ToggleButton)findViewById(R.id.toggleButton1); 

     statusToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // TODO Auto-generated method stub 
       if (isChecked) 
       { 
        statusToggle.setTextOn("On"); 
        Toast.makeText(getApplicationContext(), "Toggle is on", Toast.LENGTH_LONG).show(); 
        startService(new Intent(getBaseContext(), MyServices.class)); 
       } 
       else 
       { 
        statusToggle.setTextOff("Off"); 
        Toast.makeText(getApplicationContext(), "Toggle is off", Toast.LENGTH_LONG).show(); 
        stopService(new Intent(getBaseContext(), MyServices.class)); 
       } 
      } 
     }); 
    } 


    } 

Это MyServices класс

package com.salesforce.samples.templateapp; 

import java.util.HashMap; 

import org.json.JSONArray; 

import com.salesforce.androidsdk.app.ForceApp; 
import com.salesforce.androidsdk.rest.RestClient; 
import com.salesforce.androidsdk.rest.RestRequest; 
import com.salesforce.androidsdk.rest.RestResponse; 
import com.salesforce.androidsdk.rest.RestClient.AsyncRequestCallback; 

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.app.Service; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.provider.Settings; 
import android.util.Log; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MyServices extends Service { 
    RestClient client; 
    double plat; 
    double plong; 
    int Two_Min=5*60*1000; 

    // TextView infoText; 

    public int onStartCommand(Intent intent, int flags, int startId) { 

     Toast.makeText(this, "Location Updation has started", Toast.LENGTH_LONG) 
       .show(); 
     detectLocation(); 
     return START_STICKY; 

    } 

    private void detectLocation() { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "Inside detectlocation()", Toast.LENGTH_SHORT) 
       .show(); 
     LocationManager lm1 = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     LocationListener ll1 = new MyLocationListetner(); 
     Log.v("X", 
       "Response:After creating lm and ll "); 

     lm1.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, Two_Min, ll1); 
     Log.v("X", 
       "Response:After lm1.requestLocationUpdates "); 
     ll1.onLocationChanged(null); 
    } 

    class MyLocationListetner implements LocationListener { 

     @Override 
     public void onLocationChanged(Location location) { 
      // TODO Auto-generated method stub 
      Log.v("X","Response:inside onLocationChanged "); 
      Log.v("X","Response:"+location); 
      if (location == null) { 
       plat = location.getLatitude(); 
       plong = location.getLongitude(); 
       Log.v("X", 
         "Response:Location " + Double.toString(plat)+Double.toString(plong)); 

       String objectType = "akshayg__User__c"; 
       String objectId = "a02900000089fK3"; 
       HashMap<String, Object> fields = new HashMap<String, Object>(); 
       fields.put("Name", "Ashish"); 
       // fields.put("akshayg__Donor_Location__Latitude__s", 
       // Double.toString(plat)); 
       // fields.put("akshayg__Donor_Location__Longitude__s", 
       // Double.toString(plong)); 
       RestRequest request = null; 

       try { 
        request = RestRequest.getRequestForUpdate(
          getString(R.string.api_version), objectType, 
          objectId, fields); 
        // Toast.makeText(this, "Location Updation has started", 
        // Toast.LENGTH_LONG).show(); 
       } catch (Exception e) { 
        // printHeader("Could not build update request"); 
        printException(e); 
        return; 
       } 

       client.sendAsync(request, new AsyncRequestCallback() { 

        @Override 
        public void onSuccess(RestRequest request, 
          RestResponse result) { 

         // Toast.makeText(this, 
         // ""+Double.toString(plat)+","+Double.toString(plong), 
         // Toast.LENGTH_LONG).show(); 

         try { 
          //Toast.makeText(this, "Location Updated",Toast.LENGTH_LONG).show(); 

          Log.v("X", 
            "Response: " + result.toString()); 
          /*JSONArray records = result.asJSONObject() 
            .getJSONArray("records"); 
          for (int i = 0; i < records.length(); i++) { 
           // listAdapter.add(records.getJSONObject(i).getString("Name")); 
           // listAdapter.add(records.getJSONObject(i).getString("akshayg__Phone_Number__c")); 
           // listAdapter.add(records.getJSONObject(i).getString("akshayg__Donor_Location__Latitude__s")); 
           // listAdapter.add(records.getJSONObject(i).getString("akshayg__Donor_Location__Longitude__s")); 
          }*/ 
         } catch (Exception e) { 
          onError(e); 
         } 
        } 

        @Override 
        public void onError(Exception exception) { 
         Log.v("X", 
           "Response: " + exception.toString()); 

         // Toast.makeText(MainActivity.this, 
         // MainActivity.this.getString(ForceApp.APP.getSalesforceR().stringGenericError(), 
         // exception.toString()), 
         // Toast.LENGTH_LONG).show(); 
        } 

       }); 
      } 

     } 

     private void printException(Exception e) { 
      String err = "Error: " + e.getClass().getSimpleName(); 
      Toast.makeText(getApplicationContext(), err, Toast.LENGTH_LONG) 
        .show(); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 


     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      // TODO Auto-generated method stub 

     } 

    } 

    public void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(this, "Location Updation has stoped", Toast.LENGTH_LONG) 
       .show(); 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

здесь мои ошибки журнала кошачьи получают ..

04-02 23:01:33.375: E/AndroidRuntime(4779): FATAL EXCEPTION: main 
04-02 23:01:33.375: E/AndroidRuntime(4779): java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=com.salesforce.samples.templateapp/.MyServices }: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2403) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at android.app.ActivityThread.access$1900(ActivityThread.java:127) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1221) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at android.os.Looper.loop(Looper.java:137) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at android.app.ActivityThread.main(ActivityThread.java:4448) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at dalvik.system.NativeStart.main(Native Method) 
04-02 23:01:33.375: E/AndroidRuntime(4779): Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at android.app.ContextImpl.startActivity(ContextImpl.java:877) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at android.content.ContextWrapper.startActivity(ContextWrapper.java:276) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at com.salesforce.samples.templateapp.MyServices.onStartCommand(MyServices.java:43) 
04-02 23:01:33.375: E/AndroidRuntime(4779):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2386) 

контроля происходит до после onLocationChanged(), но не введя если .. .else. это bcoz m отправка NULL из класса обслуживания в onLocationChanged() ..? , но даже если я проверяю местоположение! = Null в условии, если элемент управления по-прежнему не проходит с помощью инструкции if. , пожалуйста, предложите исправления ... !!

+3

Опубликовать ошибки в logcat –

+0

Я попытался поймать ошибки logcat, но в соответствии с моей измененной проблемой не удалось получить какую-либо ошибку m только получить некоторые отладки и информацию ... теперь проблема немного изменилась, но все еще связана с сервисами в sndroid, поэтому дайте он еще прочитал и дайте мне знать, где я не ошибся ... – akshayg21

ответ

0

Как сказал Абхиджит, было бы легче помочь вам с ошибкой LogCat, потому что вы указали ошибку, которая всегда отображается андроидом, для любого исключения, поднятого в вашем коде.

Если бы я должен был догадаться, я бы сказал, что, возможно, ваша активность UserStatus не объявлена ​​в вашем манифесте.

EDIT: Кстати, убедитесь, что GPS включен на тестируемом устройстве. Возможно, вы захотите проверить его программно так, как это делается на веб-сайте разработчиков Android, и откройте настройки местоположения, если они не включены. Проверьте это here.

+0

Благодарю вас за усилия ур, но теперь я использую кнопку переключения вместо переключателя и, как указано в моей проблеме, я получаю тосты, которые начались, но геолокация обнаружение не происходит .. и когда я пытаюсь поставить тост внутри метода detectlocation, он дает мне ошибку: метод makeText (Context, CharSequence, int) в типе Toast не применим для аргументов (MyServices.myLocationListetner, String, int) – akshayg21

+0

Какой из ваших тостов на самом деле отображается? Ошибка, которую вы получаете, вероятно, находится в вашем слушателе, а не в методе 'detectLocation()' вашей службы, правильно? Для этой ошибки вы можете просто использовать 'MyServices.this' вместо' this'. – Joffrey

+0

Я поставил тосты в различные точки, чтобы контролировать поток прогарма. если u hv внимательно наблюдал за моим кодом, i hv дал тост за: 1. «Переключатель включен», когда я нажимаю кнопку переключения 2. «Определение местоположения началось», когда в onStartCommand() из MyService 3. «внутри detectlocation () », когда внутри моего метода обнаружено местоположение 4.« Обнаружение местоположения остановлено », когда в onDestroy() 5.«Toggle выключен», когда он выключен , поэтому я знаю, что он идет в методах класса myService, но я не знаю, что его не обнаружило местоположения. – akshayg21

Смежные вопросы