2014-11-26 3 views
0

Итак, когда я прокомментировал комментарий к комментарию на facebook, менеджер местоположений работает, а onLocationChanged обновляет правильную широту и долготу. Однако, когда я раскомментирую его, функциональность Facebook работает, но onLocationChanged никогда не вызывается по какой-то причине.(Android) Запуск фрагмента блокирует LocationListener

MainActivity.java

public class MainActivity extends FragmentActivity implements OnClickListener { 
    private MainFragment mainFragment; 
    Button sendIPbutton; //Button for sending IP Address 
    EditText mEdit; //Get info from what user enters in form 
    //TextView mText; 
    TextView coordinates; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 



     setContentView(R.layout.activity_main); 

     /*http://www.firstdroid.com/2010/04/29/android-development-using-gps-to-get-current-location-2/*/ 
     /* Use the LocationManager class to obtain GPS locations */ 
     LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     LocationListener mlocListener = new MyLocationListener(); 
     mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 





/**************************Facebook code********************************************/ 

     if (savedInstanceState == null) { 
      // Add the fragment on initial activity setup 
      mainFragment = new MainFragment(); 
      getSupportFragmentManager() 
        .beginTransaction() 
        .add(android.R.id.content, mainFragment) 
        .commit(); 
     } else { 
      // Or set the fragment from restored state info 
      mainFragment = (MainFragment) getSupportFragmentManager() 
        .findFragmentById(android.R.id.content); 
     } 
/*********************************************************************************/ 
    } 



    /* Class My Location Listener */ 
    public class MyLocationListener implements LocationListener{ 
     @Override 
     public void onLocationChanged(Location loc){ 
      loc.getLatitude(); 
      loc.getLongitude(); 
      String Text = "Latitude: " + loc.getLatitude() + "\nLongitude: " + loc.getLongitude(); 
//   Toast.makeText(getApplicationContext(),Text, Toast.LENGTH_SHORT).show(); 

      coordinates = (TextView)findViewById(R.id.coordinates); 

      coordinates.setText(Text); 
     } 


     @Override 
     public void onProviderDisabled(String provider){ 
      Toast.makeText(getApplicationContext(), 
        "Gps Disabled", 

        Toast.LENGTH_SHORT).show(); 

     } 


     @Override 
     public void onProviderEnabled(String provider){ 
      Toast.makeText(getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show(); 
     } 


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

    }/* End of Class MyLocationListener */ 



    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     InputMethodManager imm = (InputMethodManager)getSystemService(Context. 
       INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
     return true; 
    } 

    public void setObject(View view){ 
     Intent intent = new Intent(this, SetObjectActivity.class); 
     startActivity(intent); 
    } 

Я думаю, что должно быть что-то происходит в OnCreate функции.

Вот мой код MainFragment.java. Обратите внимание, что это в основном из учебника Facebook Login and Sharing на их веб-сайте.

public class MainFragment extends Fragment { 
    private Button shareButton; 
    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); 
    private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization"; 
    private boolean pendingPublishReauthorization = false; 
    private static final String TAG = MainFragment.class.getSimpleName(); 
    private TextView coordinates; 
    private UiLifecycleHelper uiHelper; 

    private final List<String> permissions; 

    public MainFragment() { 
     permissions = Arrays.asList("user_status"); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     uiHelper = new UiLifecycleHelper(getActivity(), callback); 
     uiHelper.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activity_main, container, false); 
     shareButton = (Button) view.findViewById(R.id.shareButton); 
     coordinates = (TextView) view.findViewById(R.id.coordinates); 

     shareButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       publishStory(); 
      } 
     }); 
     LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton); 
     authButton.setFragment(this); 
     authButton.setReadPermissions(permissions); 
     if (savedInstanceState != null) { 
      pendingPublishReauthorization = 
        savedInstanceState.getBoolean(PENDING_PUBLISH_KEY, false); 
     } 
     return view; 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     // For scenarios where the main activity is launched and user 
     // session is not null, the session state change notification 
     // may not be triggered. Trigger it if it's open/closed. 
     Session session = Session.getActiveSession(); 
     if (session != null && 
       (session.isOpened() || session.isClosed())) { 
      onSessionStateChange(session, session.getState(), null); 
     } 

     uiHelper.onResume(); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     uiHelper.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     uiHelper.onDestroy(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean(PENDING_PUBLISH_KEY, pendingPublishReauthorization); 
     uiHelper.onSaveInstanceState(outState); 
    } 
    private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
     if (state.isOpened()) { 

      shareButton.setVisibility(View.VISIBLE); 
      if (pendingPublishReauthorization && 
        state.equals(SessionState.OPENED_TOKEN_UPDATED)) { 
       pendingPublishReauthorization = false; 
       publishStory(); 
      } 

     } else if (state.isClosed()) { 
      shareButton.setVisibility(View.INVISIBLE); 
     } 
    } 

    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, 
         Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

    private void publishStory() { 
     Session session = Session.getActiveSession(); 

     if (session != null){ 

      // Check for publish permissions 
      List<String> permissions = session.getPermissions(); 
      if (!isSubsetOf(PERMISSIONS, permissions)) { 
       pendingPublishReauthorization = true; 
       Session.NewPermissionsRequest newPermissionsRequest = new Session 
         .NewPermissionsRequest(this, PERMISSIONS); 
       session.requestNewPublishPermissions(newPermissionsRequest); 
       return; 
      } 



      String text = coordinates.getText().toString(); 
      Bundle postParams = new Bundle(); 
      postParams.putString("name", "My Location!"); 
      postParams.putString("caption", "Thanks to Hot and Cold"); 
      postParams.putString("description", text); 
      postParams.putString("link", null); 
      postParams.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png"); 

      Request.Callback callback= new Request.Callback() { 
       public void onCompleted(Response response) { 
        JSONObject graphResponse = response 
          .getGraphObject() 
          .getInnerJSONObject(); 
        String postId = null; 
        try { 
         postId = graphResponse.getString("id"); 
        } catch (JSONException e) { 
         Log.i(TAG, 
           "JSON error "+ e.getMessage()); 
        } 
        FacebookRequestError error = response.getError(); 
        if (error != null) { 
         Toast.makeText(getActivity() 
             .getApplicationContext(), 
           error.getErrorMessage(), 
           Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(getActivity() 
             .getApplicationContext(), 
           postId, 
           Toast.LENGTH_LONG).show(); 
        } 
       } 
      }; 

      Request request = new Request(session, "me/feed", postParams, 
        HttpMethod.POST, callback); 

      RequestAsyncTask task = new RequestAsyncTask(request); 
      task.execute(); 
     } 

    } 

    private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) { 
     for (String string : subset) { 
      if (!superset.contains(string)) { 
       return false; 
      } 
     } 
     return true; 
    } 
} 

ответ

0

Так что, по-видимому, я был спот по поводу фрагмента, вызывающего проблему. Чтобы разрешить его, я просто добавил контекст в класс фрагмента, я импортировал всю логику местоположения в MainFragment, и теперь он работает!

+0

Не могли бы вы дать более подробную информацию о том, как вы это исправили? получил ту же проблему, но не могу понять из вашего ответа, что вы сделали. – Jjang

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