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
MainActivity.java
activity_main.xml
Provider.xml
Widget.xml
Manifest.xml
Ich bitte um eure hilfe.
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;
}
}
}
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();
}
}
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>
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"
/>
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>
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.