studio pie library example chart barchart android android-activity

pie - mpandroidchart example



¿Cómo usar "Send Feeback", FeedbackActivity, en Android? (1)

Solución para todas las API

He agregado todas mis investigaciones y publicaciones relacionadas

He estado buscando la mejor solución para esto por un tiempo. Mire la aplicación Google "MyTracks" que es de código abierto y en Google Code aquí:

https://code.google.com/p/mytracks/source/browse/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java

Observe cómo manejan la compatibilidad entre niveles de API con sus clases de adaptador de API:

https://code.google.com/p/mytracks/source/browse/MyTracks/src/com/google/android/apps/mytracks#mytracks%2Futil

Manejo de menús:

Basado en API => 14 (permitir comentarios):

menu.findItem(R.id.track_list_feedback) .setVisible(ApiAdapterFactory.getApiAdapter().isGoogleFeedbackAvailable());

Esto eliminará el botón "Enviar comentarios" si la API es menor que 14.

Envío de comentarios:

https://code.google.com/p/mytracks/source/browse/MyTracks/src/com/google/android/apps/mytracks/util/GoogleFeedbackUtils.java

Basado en API => 14 (enviar comentarios):

public class GoogleFeedbackUtils { private static final String TAG = GoogleFeedbackUtils.class.getSimpleName(); private GoogleFeedbackUtils() {} /** * Binds the Google Feedback service. * * @param context the context */ public static void bindFeedback(Context context) { Intent intent = new Intent(Intent.ACTION_BUG_REPORT); intent.setComponent(new ComponentName("com.google.android.gms", "com.google.android.gms.feedback.LegacyBugReportService")); ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { try { service.transact(Binder.FIRST_CALL_TRANSACTION, Parcel.obtain(), null, 0); } catch (RemoteException e) { Log.e(TAG, "RemoteException", e); } } @Override public void onServiceDisconnected(ComponentName name) {} }; // Bind to the service after creating it if necessary context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); } }

Código para el menú:

https://code.google.com/p/mytracks/source/browse/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java

Fragmento de origen, Basado en API => 14:

@Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent; switch (item.getItemId()) { case R.id.track_list_feedback: GoogleFeedbackUtils.bindFeedback(this); return true; default: return super.onOptionsItemSelected(item); } }

Solución para API 10+:

Lea aquí: ¿Cómo usar Intent.ACTION_APP_ERROR como medio para un marco de "comentarios" en Android? y aquí: http://blog.tomtasche.at/2012/10/use-built-in-feedback-mechanism-on.html

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private void sendFeedback() { try { int i = 3 / 0; } catch (Exception e) { ApplicationErrorReport report = new ApplicationErrorReport(); report.packageName = report.processName = getApplication().getPackageName(); report.time = System.currentTimeMillis(); report.type = ApplicationErrorReport.TYPE_CRASH; report.systemApp = false; ApplicationErrorReport.CrashInfo crash = new ApplicationErrorReport.CrashInfo(); crash.exceptionClassName = e.getClass().getSimpleName(); crash.exceptionMessage = e.getMessage(); StringWriter writer = new StringWriter(); PrintWriter printer = new PrintWriter(writer); e.printStackTrace(printer); crash.stackTrace = writer.toString(); StackTraceElement stack = e.getStackTrace()[0]; crash.throwClassName = stack.getClassName(); crash.throwFileName = stack.getFileName(); crash.throwLineNumber = stack.getLineNumber(); crash.throwMethodName = stack.getMethodName(); report.crashInfo = crash; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setClassName("com.google.android.feedback", "com.google.android.feedback.FeedbackActivity"); intent.putExtra(Intent.EXTRA_BUG_REPORT, report); startActivity(intent); } }

Solución para todas las API

En pocas palabras: el informe de la aplicación se realizará para todos los teléfonos con API 10+ y la aplicación instalada o se puede enviar información por correo electrónico.

1. Asegúrate de que el usuario tenga la aplicación instalada

if (applicationExist("com.google.android.feedback"))

2. Si el usuario tiene la aplicación instalada, ejecute la aplicación de comentarios directamente

intent.setClassName("com.google.android.feedback", "com.google.android.feedback.FeedbackActivity");

3. Si el usuario no tiene la aplicación instalada, envíe comentarios a Email

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private void sendFeedback() { try { int i = 3 / 0; } catch (Exception e) { ApplicationErrorReport report = new ApplicationErrorReport(); report.packageName = report.processName = getApplication().getPackageName(); report.time = System.currentTimeMillis(); report.type = ApplicationErrorReport.TYPE_NONE; report.systemApp = false; ApplicationErrorReport.CrashInfo crash = new ApplicationErrorReport.CrashInfo(); crash.exceptionClassName = e.getClass().getSimpleName(); crash.exceptionMessage = e.getMessage(); StringWriter writer = new StringWriter(); PrintWriter printer = new PrintWriter(writer); e.printStackTrace(printer); crash.stackTrace = writer.toString(); StackTraceElement stack = e.getStackTrace()[0]; crash.throwClassName = stack.getClassName(); crash.throwFileName = stack.getFileName(); crash.throwLineNumber = stack.getLineNumber(); crash.throwMethodName = stack.getMethodName(); report.crashInfo = crash; try { if (applicationExist("com.google.android.feedback")) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setClassName("com.google.android.feedback", "com.google.android.feedback.FeedbackActivity"); intent.putExtra(Intent.EXTRA_BUG_REPORT, report); startActivity(intent); } else { Intent intent = new Intent(Intent.ACTION_SEND); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); intent.putExtra(Intent.EXTRA_SUBJECT, getApplicationContext().getApplicationInfo().loadLabel(getApplicationContext().getPackageManager()).toString()+"("+getPackageManager().getPackageInfo(getApplicationInfo().packageName, 0).versionName+")"+" Contact Form | Device: "+Build.MANUFACTURER+" "+Build.DEVICE+"("+Build.MODEL+") API: "+Build.VERSION.SDK_INT); intent.setType("plain/html"); startActivity(intent); } } catch (Exception e2) { } } } private boolean applicationExist(String uri) { PackageManager pm = this.getPackageManager(); boolean exists = false; try { pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); exists = true; } catch (Exception e) { } return exists; }

¿Hay alguna muestra del uso de com.google.android.feedback.FeedbackActivity como se usa en la aplicación de Google+ para enviar comentarios?

Intenté comenzar con

Intent intent = new Intent(); intent.setClassName("com.google.android.feedback", "com.google.android.feedback.FeedbackActivity"); startActivity(intent);

pero solo obtengo

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.android.feedback/com.google.android.feedback.FeedbackActivity}: java.lang.NullPointerException