Продолжение расследования "приложение не работает в Droid":код.Кто-нибудь может увидеть здесь какую-нибудь очевидную ошибку?

StackOverflow https://stackoverflow.com/questions/1774750

  •  21-09-2019
  •  | 
  •  

Вопрос

В моем предыдущем вопросе я спросил, если System.currentTimeMillis() глючил в Droid, и ответ был отрицательным.

Я предполагаю, что проблема, с которой я столкнулся, кроется где-то в другом месте.Пока я жду, пока мой пользователь-одиночка Droid сообщит, работает ли тестовое приложение на его телефоне, я хотел бы опубликовать здесь некоторый соответствующий код.

Пожалуйста, имейте в виду, что я удалил все в коде, который, по моему мнению, был бы неактуальным (опубликование кода, ведущего к первой подозрительной строке в журнале).Возможно, я удалил код, в котором возникла проблема, но я сомневаюсь в этом.Это пахнет проблемой макета, а не кода.Я говорю это потому, что (см. последнюю строку, где находится журнал) поверхность равна 0.

С наилучшими пожеланиями, Ари.

ПРОЯВЛЕННЫЙ

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".BeMeBB" android:label="@string/app_name"
        android:screenOrientation="landscape">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="BeMeBBPref" android:label="@string/app_name">
    </activity>
</application>
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
<supports-screens>
</supports-screens>

ПЛАНИРОВКА

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:paddingTop="0pt" android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:gravity="bottom" android:background="#00000001">

    <android.view.SurfaceView android:id="@+id/preview_LAND"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:keepScreenOn="true" android:layout_margin="0pt">
    </android.view.SurfaceView>

    <LinearLayout android:orientation="vertical"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:layout_weight="1">

        <TextView android:id="@+id/ACCELERATION_LINE" android:text="0  2  4  6  8  10 12 14 16 18 20  "
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:typeface="monospace" android:layout_weight="0"
            android:textSize="20dp" android:textStyle="bold" android:textColor="@color/white"
            android:layout_gravity="center_horizontal" android:paddingTop="0dp"
            android:paddingLeft="0dp" android:background="#66000000" />

        <TextView android:id="@+id/ACCELERATION" android:text="@string/Accelerometers"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:typeface="monospace" android:textStyle="bold"
            android:layout_weight="0" android:textSize="20dp" android:textColor="@color/white"
            android:layout_gravity="center_horizontal|top" android:paddingLeft="0dp"
            android:background="#66000000" />

        <LinearLayout android:orientation="horizontal"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:gravity="bottom" android:layout_weight="1">

            <Button android:id="@+id/SAVE_LAND" android:text="@string/Save"
                android:layout_width="wrap_content" android:gravity="left|bottom"
                android:layout_height="wrap_content" android:layout_weight="0"
                android:textSize="26dp" android:textColor="@color/black"
                android:padding="20dp" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

код

public class BeMeBB extends Activity implements OnClickListener, android.content.DialogInterface.OnClickListener, SensorEventListener {
    private SurfaceView preview=null;
    private SurfaceHolder previewHolder=null;

    SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
        public void surfaceCreated(SurfaceHolder holder) {
            DoRecording();      
        }   
    }; // End SurfaceHolder.Callback surfaceCallback

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main_land);
        preview=(SurfaceView)findViewById(R.id.preview_LAND);
        previewHolder=preview.getHolder();
        previewHolder.addCallback(surfaceCallback);
        previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    } // End OnCreate

    private void DoRecording() {
        m_worker.setSurfaceHolder(previewHolder);
    } // End DoRecording
} // End class

В ДРУГОМ КЛАССЕ

public void setSurfaceHolder(SurfaceHolder previewHolder) { 
    m_previewHolder = previewHolder;
    m_surface = m_previewHolder.getSurface();   
    Log.d("BeMeBB", "BeMeBBWorker m_surface="  + m_surface);
} //End  setSurfaceHolder

И РЕЗУЛЬТАТ В ЖУРНАЛЕ (ПОВЕРХНОСТЬ НЕДЕЙСТВИТЕЛЬНА):

11-19 17:58:13.171 D/BeMeBB  ( 1404): BeMeBBService m_surface=Surface(native-token=0)
Это было полезно?

Решение

Теперь это подтверждено, мой одинокий пользователь Droid отправил обратно 2 файла журнала из:

  1. Тестовое приложение, использующее MediaRecorder.setPreviewDisplay (Surface sv).Это ТРЕБУЕТ использования getSurface, который выходит из строя в API 5 на Droid phone.

  2. Тестовое приложение, использующее Camera.setPreviewDisplay(SurfaceHolder sh).Это ТРЕБУЕТ использования MediaRecorder.setCamera для предварительного просмотра, но setCamera, по-видимому, является нарушенной "Камерой с известными ограничениями" в API 3.

Итак:У меня не может быть предварительно просмотренного медиарегистратора, который работает на версиях 1.5 и 2.0.Итак, мой единственный вариант (подтвержденный MediaRecorder.setCamera не сломан в Android2.0 - они добавили разблокировку) - это иметь две отдельные версии, одну для API 3 и одну для API 5.

Спасибо, commonsware, что указали мне правильное направление.Я изменю статус на "отвечено", как только повторю попытку с помощью deviceanywhere, просто на всякий случай.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top