Continuazione del 'app non funziona in Droid' indagine: il codice. Chiunque può vedere qualsiasi errore evidente qui?

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

  •  21-09-2019
  •  | 
  •  

Domanda

Nella mia domanda precedente ho chiesto se era System.currentTimeMillis() buggy in Droid, e la risposta è stata no.

Suppongo che il problema che sto avendo è da qualche altra parte. Mentre aspetto il mio Droid lone-utente di segnalare se un applicazione di test lavora sul suo telefono, vorrei inviare un certo codice qui rilevante.

Si prega di tenere a mente che ho rimosso tutto il codice che ho pensato che sarebbe stato irrilevante (la pubblicazione del codice che porta alla prima linea di sospetto nel registro). Potrei rimosso il codice in cui il problema è, ma ne dubito. C'è odore di un layout, senza codice, problema. Dico questo perché (vedi ultima riga, dove il registro è) la superficie è 0.

Con i migliori saluti, Ari.

MANIFESTO

<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>

Layout

<?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>

codice

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

in un'altra classe

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

e il risultato in LOG (superficie non è valido):

11-19 17:58:13.171 D/BeMeBB  ( 1404): BeMeBBService m_surface=Surface(native-token=0)
È stato utile?

Soluzione

Ora è confermato, il mio solitario utente Droid ha inviato i file di log 2 di ritorno da:

  1. Un'applicazione di test utilizzando MediaRecorder.setPreviewDisplay (sv superficie). Si richiede l'utilizzo di getSurface, che si blocca in API 5 sul telefono Droid.

  2. Un'applicazione di test utilizzando Camera.setPreviewDisplay (SurfaceHolder sh). Si richiede l'uso di MediaRecorder.setCamera per l'anteprima, ma a quanto pare setcamera è rotto "conosciuto limitazione - fotocamera bloccato" in API 3.

Quindi: Non posso avere un registratore video in anteprima che funziona su 1.5 e 2.0. Così la mia unica opzione è, (confermata MediaRecorder.setCamera non è rotto in android2.0 - hanno aggiunto uno sbloccare) è quello di avere due versioni distinte, una per API 3 e uno per API 5.

Grazie commonsware per avermi nella giusta direzione. Io modificare lo stato "risposto" una volta che provo di nuovo con DeviceAnywhere, giusto per essere sicuri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top