Lautlosmodus Schalter APP Fehler

Q

qweqwe21

Erfahrenes Mitglied
8
Hi ich habe das Buch Android App Entwicklung für Dummies.

Dort macht man auch eine Lautlosmodus Schalter App mit Widget.

Wenn ich das Widget auf dem Startbildschirm habe ändert sich nach 15- 40 min der Modus automatisch, warum?
Es sollte sich nur bei Klick ändern hier mal der Code.
Außerdem habe ich die Vibrations Funktion hinzugefügt, war vorher nur Normal und Silent.

AppWidget.java
Code:
package com.developerstudio.profileassistant;

import android.app.Activity;
import android.app.IntentService;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.widget.RemoteViews;


public class AppWidget extends AppWidgetProvider {

    @Override
    public void onReceive(Context ctxt, Intent intent) {

        if (intent.getAction() == null) {
            ctxt.startService(new Intent(ctxt, ToggleService.class));
        } else {
            super.onReceive(ctxt, intent);
        }
    }
    
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        context.startService(new Intent(context, ToggleService.class));
    }

    
    public static class ToggleService extends IntentService {
        
        public ToggleService() {
            super(ToggleService.class.getName());
        }
    
    @Override
    protected void onHandleIntent(Intent intent) {
        ComponentName me = new ComponentName(this, AppWidget.class);
        AppWidgetManager mgr = AppWidgetManager.getInstance(this);
        mgr.updateAppWidget(me, buildUpdate(this));
    }
    
    private RemoteViews buildUpdate(Context context) {
        RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget);

        AudioManager audioManager = (AudioManager) context.getSystemService(Activity.AUDIO_SERVICE);
        
        if (audioManager.getRingerMode() == AudioManager.RINGER_MODE_SILENT) {
            updateViews.setImageViewResource(R.id.phoneState, R.drawable.phone_state_vibrate);
            audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
        } else if (audioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE){
            updateViews.setImageViewResource(R.id.phoneState, R.drawable.phone_state_normal);
            audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        } else if (audioManager.getRingerMode() == AudioManager.RINGER_MODE_NORMAL){
            updateViews.setImageViewResource(R.id.phoneState, R.drawable.phone_state_silent);
            audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
        }

        Intent i = new Intent(this, AppWidget.class);
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
        updateViews.setOnClickPendingIntent(R.id.phoneState, pi);

        return updateViews;

    }
}
}
MainActivity.java

Code:
package com.developerstudio.profileassistant;

import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.google.android.gms.ads.*;

public class MainActivity extends Activity {

    private AudioManager mAudioManager;
    private int mPhoneIsMode;
    private AdView adView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        
        // Create the adView.
        adView = new AdView(this);
        adView.setAdUnitId("");
        adView.setAdSize(AdSize.BANNER);

        // Lookup your LinearLayout assuming it's been given
        // the attribute android:id="@+id/mainLayout".
        LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);

        // Add the adView to it.
        layout.addView(adView);

        // Initiate a generic request.
        AdRequest adRequest = new AdRequest.Builder().build();

        // Load the adView with the ad request.
        adView.loadAd(adRequest);


        
        mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
        
        checkPhoneMode();
        
        setButtonClickListener();
    }
    
    private void setButtonClickListener() {
        Button toggleButton = (Button)findViewById(R.id.toggleButton);
        toggleButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {

                    if (mPhoneIsMode == 0) {
                        // Umschalten in Lautlosmodus
                        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
                        mPhoneIsMode = 1;
                    } else if (mPhoneIsMode == 1){
                        // Umschalten in Vibrationsmodus
                        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                        mPhoneIsMode = 2;
                    } else if (mPhoneIsMode == 2){
                        // Umschalten in Normal Modus
                        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                        mPhoneIsMode = 0;
                    }
                    
                    // UI wieder umschaltern
                    toggleUi();
                }
        });
    }

    /**
     * Feststellen, ob sich Telefon im Lautlosmodus befindet.
     */
    private void checkPhoneMode() {
        int ringerMode = mAudioManager.getRingerMode();
        if (ringerMode == AudioManager.RINGER_MODE_SILENT) {
            mPhoneIsMode = 0;
        } else if (ringerMode == AudioManager.RINGER_MODE_VIBRATE) {
            mPhoneIsMode = 1;
        } else {
            mPhoneIsMode = 2;
        }    
    }
    
    /**
     * UI_Bilder der Modi(Lautlos/Normal) austauschen.
     */
    private void toggleUi() {
        
        ImageView imageView = (ImageView)findViewById(R.id.phone_icon);
        Drawable newPhoneImage;
        
        if (mPhoneIsMode == 0) {
            newPhoneImage =
                getResources().getDrawable(R.drawable.phone_silent);
        } else if (mPhoneIsMode == 1) {
            newPhoneImage =
                getResources().getDrawable(R.drawable.phone_vibrate);
        } else {
            newPhoneImage =
                    getResources().getDrawable(R.drawable.phone_on);
        }
        
        imageView.setImageDrawable(newPhoneImage);
    }
    
    @Override
      public void onPause() {
        adView.pause();
        super.onPause();
      }
    
    @Override
    protected void onResume() {
        super.onResume();
        checkPhoneMode();
        toggleUi();
        adView.resume();
    }
    
    @Override
      public void onDestroy() {
        adView.destroy();
        super.onDestroy();
      }

}
activity_main.xml
Code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:gravity="bottom"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/phone_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/phone_on" />

    <Button
        android:id="@+id/toggleButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Profile umschalten" />
    
</LinearLayout>
Provider.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
  xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="79px"
    android:minHeight="79px"
    android:updatePeriodMillis="20000"
    android:initialLayout="@layout/widget"
  />
Widget.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <ImageView android:id="@+id/phoneState"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/ic_launcher"
        android:clickable="true" />
</RelativeLayout>
Manifest.xml

Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.developerstudio.profileassistant"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <meta-data android:name="com.google.android.gms.version"
                   android:value="@integer/google_play_services_version"/> 
        <activity
            android:name="com.developerstudio.profileassistant.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.google.android.gms.ads.AdActivity"
                  android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
        <receiver android:name=".AppWidget"
            android:label="@string/app_name"
            android:icon="@drawable/ic_launcher" >
            <intent-filter>
                <action 
                    android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
                
            </intent-filter>
           <meta-data
               android:name="android.appwidget.provider"
               android:resource="@xml/provider" />
           </receiver>
           <service android:name=".AppWidget$ToggleService"/>
    </application>
      <uses-permission android:name="android.permission.INTERNET"/>
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>


Ich bitte um eure hilfe.
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
196
swa00
swa00
E
  • evgkop
Antworten
3
Aufrufe
133
swa00
swa00
S
Antworten
0
Aufrufe
127
sorenn
S
Zurück
Oben Unten