Android Wear App

  • Hey meine test App Funktioniert nur Auf dem Handy, sobald ich diese auf der Uhr starte stürzt Sie ab sobald ich auf den Knopf record drücke.
    Auf dem Handy klappt alles wunderbar :/
    würde mich über Hilfe sehr freuen.
    (geplant ist es selbst eine App zu machen, die auf der Uhr einen Knopf anzeigt mit dem mann eine Aufnahme starten kann)



    java Activity:


    import android.app.*;
    import android.os.*;
    import android.widget.*;
    import android.app.*;
    import android.os.*;
    import android.content.*;
    import android.Manifest;
    import android.content.pm.PackageManager;
    import android.util.*;
    import android.view.*;
    import java.io.*;
    import android.media.*;
    import android.provider.*;



    public class WearableActivity extends Activity
    {
    private Button play;
    private Button record;
    private Button stop;
    private MediaRecorder myAudioRecorder;
    private String outputFile;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wearable);


    play=(Button) findViewById(R.id.play);
    stop=(Button) findViewById(R.id.stop);
    record=(Button) findViewById(R.id.record);
    //stop.setEnabled(false);
    // play.setEnabled(false);



    outputFile= Environment.getExternalStorageDirectory().getAbsolutePath()+"/recording.3gp";
    myAudioRecorder=new MediaRecorder();
    myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    myAudioRecorder.setOutputFile(outputFile);




    record.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
    try{
    myAudioRecorder.prepare();
    myAudioRecorder.start();
    }catch (IllegalStateException ise) {
    // make somthing
    }catch (IOException ioe){
    // make somthing
    }


    record.setEnabled(false);
    stop.setEnabled(true);


    Toast.makeText(getApplicationContext(),"Recording started",Toast.LENGTH_LONG).show();
    }
    });


    stop.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
    myAudioRecorder.stop();
    myAudioRecorder.release();
    myAudioRecorder= null;
    record.setEnabled(true);
    stop.setEnabled(false);
    play.setEnabled(true);
    Toast.makeText(getApplicationContext(),"Audio Recorder successfully", Toast.LENGTH_LONG).show();


    }
    });
    play.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
    MediaPlayer mediaPlayer =new MediaPlayer();


    try{
    mediaPlayer.setDataSource(outputFile);
    mediaPlayer.prepare();
    mediaPlayer.start();


    Toast.makeText(getApplicationContext(), "Playing Audio", Toast.LENGTH_LONG).show();
    }catch (Exception e){
    // make something
    }
    }
    });
    }
    }




    wearable.xml:

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">


    <Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="record"
    android:id="@+id/record"/>


    <Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="stop"
    android:id="@+id/stop"/>


    <Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="play1"
    android:id="@+id/play"/>


    </LinearLayout>



    Manifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mycompany.Zer0" >
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.DeviceDefault.Light" >
    <activity
    android:name=".WearableActivity"
    android:label="@string/app_name" >
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>


    </manifest>




  • Uhr:
    ASUS ZenWacht 2
    Android Wear
    2.7.0.178645119
    Android Betriebssystem 7.1.1


    Handy:
    Galaxy A3 (2017)
    Android-Version 7.0



    Min-Target ? habe ich nirgends eingestellt, zumindest weiß ich nicht wie.
    ich benutze AIDE für auf dem Smartphone zur Entwicklung.
    Danke für die schnelle Antwort.

  • Hi,


    eine fertig kompilerte APK wird Dir da nichts bringen. (kann man nicht so ohne weiteres und vor allem zu 100% in die ursrpüngliche Form zurückbringen)
    Außerdem ist es doch viel gewinnbringender wenn man den Fehler findet ....Das schafft man allerdings nur mit der dementsprechenden Software. Viele von uns benutzen daher Android Studio. Diese Software bringt die dafür vorhergesehenen Tools mit. Eclipse ist auch eine Umgebung, die so etwas kann.
    Nur mit diesen Tools, kann man nachvollziehen, warum ein Code an einer bestimmten Stelle aussteigt.
    Hast Du Dir denn schon entsprechende Tutorials angeschaut, wie ein Programm/Code aufgebaut ist ?


    Viele Grüße Carsten


    PS: Du hast mehrere Exception mit eingebaut. Das ist schon mal nicht verkehrt (was soll der Code eigentlich genau machen, wenn eine Exceütion kommt ???), aber leider ist aus Deiner Schilderung nicht ersichtlich, an welcher Stelle des Codes dein Programm aussteigt, da wäre ein debugging / logcat hilfreich. Der Code muss nicht zwingend an der Stelle abbrechen, an der du es meinst.....

  • hi, zum Verständnis deiner App. Du willst wenn man den Rekord Button drückt eine Aufnahme gemacht wird, und bei play wiedergegeben wird. Richtig?
    Ich habe leider keine smartwhach kann es nicht testen.
    Ist auf der Uhr auch der Media Player und autorecordner auch vorhanden?
    Ebenfalls kann es an den premisson liegen, so das die Uhr keinen Zugriff Erlaubnis auf den externen Speicher hat.
    Bei dieser Zeile wurde mich interessieren ob outputFile " null " ist.
    outputFile= Environment.getExternalStorageDirectory().getAbsolutePath()+"/recording.3gp";
    Prüfte es mit dem debuger oder gib einen tost aus mit dem Inhalt der Variablen.
    Nach dem sie gesetzt wurde.


    Da du wahrscheinlich die app in der IDE laufen lässt könnte es sein das da die nötigen rechte erteilt sind.
    Du setzt zwar die nötigen premisson im Manifest aber ab android 6.0 reicht dies nicht mehr aus , da müssen die rechte in der app vom User bestätigt werden.

  • outputFile= Environment.getExternalStorageDirectory().getAbsolutePath()+"/recording.3gp";


    Schreibe einfach mal outputFile= "recording.3gp";
    Dann sollte die Datei im app Speicher abgelegt werden da bracht du keine besonderen rechte. Wenn das geht weißt du wo der Fehler ist.

  • hey danke für die ganze Hilfe Leute.
    nach dem ändern outputFile= "recording.3gp"; funktioniert das Aufnehmen jetzt auch auf der Uhr.
    Das neue Problem ist ,dass die Stopp Funktion die Uhren-App jetzt zum abstürzen bringt.
    jetzt muss ich nur noch hinbekommen, dass ich das Audio an das Handy schicke. Oder auf dem Handy speicher.

  • PS. wenn ich im Projekt in der build.gradle die minSdkVersion auf 25 anhebe lässt sich die app danach nicht mehr auf der Uhr starten. aber das ist Nebensache, ich muss erstmal das stoppen der Aufnahme reparieren. hat jemand Tips :)


    myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); liegt es vielleicht an dem Format ?

  • erstmal zur Info die minsdkverrsion legt wie der Name schon sagt die kleinste android Version fest auf der die app läuft die sollte immer kleiner als die installierte Version sein. Hast du wirklich API 25auf der Uhr? Aber das ist nicht der Fehler.


    Wie so machst du immer das setEneble das macht man bei Radio Button aber nicht bei normalen Button.
    Wo stürzt die App genau ab? Nach dem Start drückst du Rekord und bei Stopp bricht sie ab richtig?


    Dein Code ist etwas ungewöhnlich schaue mal das Beispiel auf der Google devlopper Seite an. https://developer.android.com/…/media/mediarecorder.html

  • Hey danke für die Hilfe!!!
    Das Beispiel von der Google devlopper Seite läuft bei mir jetzt auch auf dem Handy Einwandfrei :D.
    Allerdings wird der Uhr im Appstore nicht angeboten die App zu installieren, da ja die 2 APK für die Uhr fehlt. Ich bräuchte quasi das selbe Beispiel nur für Uhren.
    wenn ich den Code genau so wie er ist, in die Java-Datei der App für Uhren ein zusetzten, bekomme ich lauter Fehler.
    Ich denke, dass vieles des Codes aus dem Beispieles nicht für Uhren vorgesehen ist.

  • hi Du solltest das Beispiel auch nicht eins zu eins übernehmen dies soll nur als Anregung dienen.

    • Wenn du wirklich richtig Android apps egal ob für ein Handy oder eine Uhr programmieren willst. Dann benutze android studio auf dem pc . Und erstelle eine richtige eigen signierte apk. Die kannst du dann auch versuchen bei Google play hochzuladen . Und wenn Google es geprüft hat wird sie auch im Store verfügbar sein.
  • Servus, ich benutze seit heute Androide Studio. Die Simulation auf einem Virtuellen Handy klappt perfekt.
    Die Simulation mit einer Virtuellen Uhr geht zwar, aber ich weiß nicht wie ich meine App starten kann. die App ist unter den normalen Apps nicht auffindbar, aber unter den Einstellungen unter Apps zu finden. Dort kann die App auch sehen sowie deinstallieren. Ich habe aber noch nicht herausgefunden, wie ich meine App öffen/starten kann.


    Da dies vielleicht an meine nicht Funktionierenden App liegen kann, habe ich versucht das Beispiel von GitHub zu verwenden
    https://github.com/googlesamples/android-WearSpeakerSample. Leider auch ohne Erfolg.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!