M
moppelg
Stammgast
- 166
Hallo,
nach meiner Notiz-Widget App:
https://www.android-hilfe.de/forum/...ten-buttons-speichern-ausgabe-text.27710.html
AndEngine Helicopter Game-Studie
AndEngine - Forums • Code Template - Flying Heli 3.5 *Terrain... * : Tutorials
Nun meine dritte App:
Call Back - Für alle die eine Telefonflat / Freiminuten haben und den ärmeren unter uns Gutes tun wollen. Wer bisher eingehende Anrufe abgelehnt hat um dann jedoch zurückzurufen musste immer erst den mühsamen Weg über die Kontaktliste nehmen.
Abhilfe schafft nun diese "Call back" App, die sofort nach jedem abgelehnten Anruf fragt, ob zurückgerufen werden soll.
Die App und der Source-Code sind auch als Anhang downloadbar.
Ich stelle einfach den Source-Code ein, davor aber der Ablauf in grob:
1. Registrierung eines Broadcast-Receiver für Telefonate im Manifest
2. Der Receiver wertet die Telefonstatuse aus und startet ggf.
3. Einen Dialog, der den Benutzer fragt, ob zurückgerufen werden soll.
Hier das Manifest:
Der Broad-Cast Receiver, der über Telefonate informiert wird:
Und schließlich die Dialog-Activity:
nach meiner Notiz-Widget App:
https://www.android-hilfe.de/forum/...ten-buttons-speichern-ausgabe-text.27710.html
AndEngine Helicopter Game-Studie
AndEngine - Forums • Code Template - Flying Heli 3.5 *Terrain... * : Tutorials
Nun meine dritte App:
Call Back - Für alle die eine Telefonflat / Freiminuten haben und den ärmeren unter uns Gutes tun wollen. Wer bisher eingehende Anrufe abgelehnt hat um dann jedoch zurückzurufen musste immer erst den mühsamen Weg über die Kontaktliste nehmen.
Abhilfe schafft nun diese "Call back" App, die sofort nach jedem abgelehnten Anruf fragt, ob zurückgerufen werden soll.
Die App und der Source-Code sind auch als Anhang downloadbar.
Ich stelle einfach den Source-Code ein, davor aber der Ablauf in grob:
1. Registrierung eines Broadcast-Receiver für Telefonate im Manifest
2. Der Receiver wertet die Telefonstatuse aus und startet ggf.
3. Einen Dialog, der den Benutzer fragt, ob zurückgerufen werden soll.
Hier das Manifest:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.moppel.callback"
android:versionCode="1"
android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat" >
<activity
android:name="com.moppel.callback.MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="ReceiverPhoneState" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<activity
android:name="AlertDialogActivity"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Translucent" >
<!-- <intent-filter> -->
<!-- <action android:name="android.intent.action.MAIN" /> -->
<!-- <category android:name="android.intent.category.LAUNCHER" /> -->
<!-- </intent-filter> -->
</activity>
</application>
</manifest>
Code:
package com.moppel.callback;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
public class ReceiverPhoneState extends BroadcastReceiver
{
static private String anrufNummer = null;
@Override
public void onReceive(final Context pContext, final Intent pIntent) {
try {
final String phoneState = pIntent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (TelephonyManager.EXTRA_STATE_RINGING.equals(phoneState)) {
ReceiverPhoneState.anrufNummer = pIntent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
}
else if (TelephonyManager.EXTRA_STATE_IDLE.equals(phoneState) && ReceiverPhoneState.anrufNummer != null) {
// Toast.makeText(pContext, ReceiverPhoneState.anrufNummer + " hat angerufen!", Toast.LENGTH_LONG).show();
final Intent intent = new Intent(pContext.getApplicationContext(), AlertDialogActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("nummer", ReceiverPhoneState.anrufNummer);
pContext.startActivity(intent);
ReceiverPhoneState.anrufNummer = null;
}
else {
ReceiverPhoneState.anrufNummer = null;
}
} catch (Exception e) {
Log.e("Phone Receive Error", " " + e);
}
}
}
Code:
package com.moppel.callback;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.CountDownTimer;
public class AlertDialogActivity extends Activity
{
// @SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final String nummer = this.getIntent().getExtras().getString("nummer");
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Call back; schließt in 5 Sekunden");
builder.setMessage("Soll die Nummer: " + nummer + " zurückgerufen werden?");
builder.setCancelable(false);
builder.setPositiveButton("Ja, zurückrufen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
final Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + nummer));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
AlertDialogActivity.this.getApplicationContext().startActivity(intent);
AlertDialogActivity.this.finish();
}
});
builder.setNegativeButton("Nein, abbrechen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
AlertDialogActivity.this.finish();
}
});
final AlertDialog alert = builder.create();
alert.show();
final CountDownTimer timer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long pMillisUntilFinished) {
alert.setTitle("Call back; schließt in " + pMillisUntilFinished / 1000 + " Sekunden");
}
@Override
public void onFinish() {
alert.dismiss();
AlertDialogActivity.this.finish();
}
};
timer.start();
}
}