Как использовать «Send Feeback», FeedbackActivity, в Android?

Есть ли пример использованияcom.google.android.feedback.FeedbackActivity нравится, что он используется в приложении Google+ для отправки отзывов?

Я пытался начать это с

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

но я только получаю

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.android.feedback/com.google.android.feedback.FeedbackActivity}: java.lang.NullPointerException
 Piyush22 авг. 2013 г., 12:38
Вы добавили это с файлом манифеста?
 Andrey Ermakov30 мая 2012 г., 10:37
Вы можете посмотреть в его исходном коде, какие дополнения он ожидает
 mars314230 мая 2012 г., 14:28
Где я могу найти источники этого? Я думаю, что это закрытый источник - я не очень хорош в реверс-инжиниринге. Вот почему я разместил вопрос здесь.
 Jared Burrows30 дек. 2013 г., 22:12
Проверять, выписываться:stackoverflow.com/questions/10559267/…

Ответы на вопрос(1)

Решение Вопроса
Solution for all APIs I have added all my research and related posts

посмотрите на Google & quot; MyTracks & quot; Приложение с открытым исходным кодом и на Google Code здесь:

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

Посмотрите, как они обрабатывают совместимость между уровнями API с помощью своих классов API-адаптеров:

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

Handling Menus:

Based on API => 14 (allow feedback):

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

При этом будет удалена кнопка «Отправить отзыв». если API ниже 14.

Sending Feedback:

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

Based on API => 14 (send feedback):

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);
  }
}
Code for menu:

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

Snippet from source, Based on 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);
    }
  }
Solution for API 10+:

Читайте здесь: Как использовать Intent.ACTION_APP_ERROR в качестве средства для «обратной связи»? рамки в Android? и здесь: 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);
    }
}
Solution for All APIs

Bottom line: Отчет о приложении будет составлен для всех телефонов с API 10+ и установленным приложением или информация может быть отправлена по электронной почте.

1. Make sure the user has the application installed

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

2. If the user has the application installed, run the Feedback application directly

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

3. If the user does not have application installed, send feedback to 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;
}
 11 мая 2014 г., 00:35
@GerritHoekstra Ссылка, которую я предоставил для приложения MyTracks, расположенного в GoogleCode.
 18 апр. 2014 г., 21:40
Почему это было отвергнуто?
 11 мая 2014 г., 11:10
Прошу прощения за недоразумение, но я имею в виду, куда отправляется отзыв при отправке формы обратной связи при использованииGoogleFeedbackUtils? КAndroid Developer Console, электронная почта, штаб-квартира Google (у меня есть сомнения по этому поводу) или где-то еще?
 10 мая 2014 г., 10:06
Куда отправляется отзыв при использовании GoogleFeedbackUtils? (Для API = & gt; 14)
 11 мая 2014 г., 20:31
@GerritHoekstra Crash Report - & gt; Консоль разработчика Android и электронная почта - & gt; Ваш адрес электронной почты

Ваш ответ на вопрос