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í:
Observe cómo manejan la compatibilidad entre niveles de API con sus clases de adaptador de API:
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:
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ú:
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