Autore Topic: Aprire Google Maps con un intent - non si apre  (Letto 1910 volte)

Offline giumazzi

  • Utente junior
  • **
  • Post: 54
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    acer liquid - android 2.1
  • Sistema operativo:
    windows xp - linux xubuntu - easy peasy
Aprire Google Maps con un intent - non si apre
« il: 03 Dicembre 2010, 00:37:41 CET »
0
Con questa classe dovrei riuscire a trovare l'indirizzo su Google Maps.
Non avendo le mappe sull'emulatore questo non lo posso verificare.
Allora ho provato l'applicazione sul mio liquid ma anche qui, cliccando sull'indirizzo, si apre soltanto uno schermo nero.
Che fare?
Codice (Java): [Seleziona]
public class AbicabDetails extends ListActivity {

        protected TextView abicabBANCA;
        protected TextView abicabABICAB;
        protected TextView abicabIndirizzo;
    protected int abicabId;
    protected int managerId;
   
        protected List<abicabAction> actions;
    protected abicabActionAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.abicab_details);
       
        abicabId = getIntent().getIntExtra("ABICAB_ID", 0);
        SQLiteDatabase db = (new DatabaseHelper(this)).getWritableDatabase();  
        Cursor cursor = db.rawQuery("SELECT emp._id, emp.ABI, emp.CAB, emp.BANCA, emp.City, emp.Indirizzo, emp.CAP, emp.Prov, emp.managerId, mgr.BANCA managerFirstBANCA, mgr.City managerLastCity FROM abicab emp LEFT OUTER JOIN abicab mgr ON emp.managerId = mgr._id WHERE emp._id = ?",
                                new String[]{""+abicabId});

        if (cursor.getCount() == 1)
        {
                cursor.moveToFirst();
       
                abicabBANCA = (TextView) findViewById(R.id.abicabBANCA);
                abicabBANCA.setText(cursor.getString(cursor.getColumnIndex("BANCA")) + " " + cursor.getString(cursor.getColumnIndex("City")));
       
                abicabABICAB = (TextView) findViewById(R.id.abicabABICAB);
                abicabABICAB.setText(cursor.getString(cursor.getColumnIndex("ABI")) + " " + cursor.getString(cursor.getColumnIndex("CAB")));

                abicabIndirizzo = (TextView) findViewById(R.id.abicabIndirizzo);
                abicabIndirizzo.setText(cursor.getString(cursor.getColumnIndex("City")) + " " + cursor.getString(cursor.getColumnIndex("Indirizzo")));

                actions = new ArrayList<abicabAction>();
               
//              String abicabAddress = (cursor.getString(cursor.getColumnIndex("City")) + "," + cursor.getString(cursor.getColumnIndex("Indirizzo")));
                String abicabAddress = cursor.getString(cursor.getColumnIndex("City"));
                if (abicabAddress != null) {
                        actions.add(new abicabAction("Vedi in Maps", abicabAddress, abicabAction.ACTION_VIEW));
                }
                managerId = cursor.getInt(cursor.getColumnIndex("managerId"));
                if (managerId>0) {
                        actions.add(new abicabAction("View manager", cursor.getString(cursor.getColumnIndex("managerFirstBANCA")) + " " + cursor.getString(cursor.getColumnIndex("managerLastCity")), abicabAction.ACTION_VIEW));
                }
                adapter = new abicabActionAdapter();
                setListAdapter(adapter);
        }
    }
       
        public void onListItemClick(ListView parent, View view, int position, long id) {
               
            abicabAction action = actions.get(position);
           
            Intent intent;
            switch (action.getType()) {
           
                case abicabAction.ACTION_VIEW:  
                        Uri mapUri = Uri.parse("geo:0,0?q=" + action.getData());  
                        intent = new Intent(this, AbicabDetails.class);
                        intent.putExtra("ABICAB_ID", managerId);
                        startActivity(intent);
                        break;
            }    
        }      
     class abicabActionAdapter extends ArrayAdapter<abicabAction> {

         abicabActionAdapter() {
                        super(AbicabDetails.this, R.layout.action_list_item, actions);
                }
               
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                        abicabAction action = actions.get(position);
                        LayoutInflater inflater = getLayoutInflater();
                        View view = inflater.inflate(R.layout.action_list_item, parent, false);
                        TextView label = (TextView) view.findViewById(R.id.label);
                        label.setText(action.getLabel());
                        TextView data = (TextView) view.findViewById(R.id.data);
                        data.setText(action.getData());
                        return view;
                }
               
        }
       
    }

su Eclipse, nel seguente punto,
Codice (Java): [Seleziona]
                        Uri mapUri = Uri.parse("geo:0,0?q=" + action.getData());  
ho un warning:
Codice: [Seleziona]
The local variable mapUri is never readGrazie per l'aiuto.

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Aprire Google Maps con un intent - non si apre
« Risposta #1 il: 03 Dicembre 2010, 00:42:44 CET »
0
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline giumazzi

  • Utente junior
  • **
  • Post: 54
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    acer liquid - android 2.1
  • Sistema operativo:
    windows xp - linux xubuntu - easy peasy
Re:Aprire Google Maps con un intent - non si apre
« Risposta #2 il: 03 Dicembre 2010, 00:54:00 CET »
0
Avevo visto il tuo post e anche questo http://www.androidsnippets.org/snippets/74/
ma la mia applicazione è basata su questo tutorial che ho trovato molto utile: http://coenraets.org/blog/android-samples/androidtutorial/
Qui l'applicazione, cliccando sulla lista, fa certe azioni, come telefonare, mandare sms, mandare mail eccetra.
Il mio intento è soltanto quello  di aprire la mappa di google prendendo l'indirizzo dal cursor.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aprire Google Maps con un intent - non si apre
« Risposta #3 il: 03 Dicembre 2010, 08:08:17 CET »
0
giumazzi, per il problema del testing su emulatore, ti do' questa idea (ora non ho il codice a portata di mouse, ma intanto te la espongo) : usando lo snippet per vedere se un Intent è richiamabile (cioè se ci sono le GoogleMaps) implemento una graceful degradation di GoogleMaps stesso, aprendo invece maps.google.it con praticamente gli stessi parametri. Sui telefoni fisici gestisci il seppur rarissimo caso in cui non abbiano GoogleMaps, e su emulatore provi tutta la tua app.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline giumazzi

  • Utente junior
  • **
  • Post: 54
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    acer liquid - android 2.1
  • Sistema operativo:
    windows xp - linux xubuntu - easy peasy
Re:Aprire Google Maps con un intent - non si apre
« Risposta #4 il: 03 Dicembre 2010, 23:57:14 CET »
0
risolto.
Codice (Java): [Seleziona]
case abicabAction.ACTION_VIEW:  
                        Uri mapUri = Uri.parse("geo:0,0?q=" + action.getData());
                        intent = new Intent(Intent.ACTION_VIEW, mapUri);
                        startActivity(intent);
                        break;

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aprire Google Maps con un intent - non si apre
« Risposta #5 il: 04 Dicembre 2010, 09:38:34 CET »
+3
Mi sono ricordato adesso, se dovesse servire a qualcuno, io ho implementato la graceful degradation in questo modo: se non c'è GoogleMaps sul terminale (quindi anche sull'emulatore) apre la mappa nel browser. Il mio esempio è con le coordinate, ma la logica è la stessa.

Codice (Java): [Seleziona]
Intent viewIntent = new Intent("android.intent.action.VIEW",Uri.parse("geo:"+t_geolat+","+t_geolng));
List<ResolveInfo> list = getPackageManager().queryIntentActivities(viewIntent,PackageManager.MATCH_DEFAULT_ONLY);
if (!list.isEmpty()) startActivity(viewIntent);
else {
      viewIntent = new Intent("android.intent.action.VIEW",Uri.parse("ht tp://maps.google.it/maps?q="+t_geolat+","+t_geolng+"&z=18"));
      startActivity(viewIntent);
}
             
« Ultima modifica: 04 Dicembre 2010, 09:40:26 CET da bradipao »
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline giumazzi

  • Utente junior
  • **
  • Post: 54
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    acer liquid - android 2.1
  • Sistema operativo:
    windows xp - linux xubuntu - easy peasy
Re:Aprire Google Maps con un intent - non si apre
« Risposta #6 il: 08 Dicembre 2010, 18:25:38 CET »
0
Grazie per l'esempio!
Qui sotto il mio adattamento:
Codice (Java): [Seleziona]
                case abicabAction.ACTION_VIEW:  
//                      Uri mapUri = Uri.parse("geo:0,0?q=" + action.getData());
                        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=" + action.getData()));
                        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);
//                      intent.putExtra("ABICAB_ID", CAP);
                        if (!list.isEmpty()) startActivity(intent);
                        else{
                                intent = new Intent(Intent.ACTION_VIEW, Uri.parse("ht tp://maps.google.it/maps?q=" + action.getData()));
                                startActivity(intent);
                        }
                        break;
« Ultima modifica: 08 Dicembre 2010, 18:36:06 CET da giumazzi »