"Call-Back" App - Source Code

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:
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>
Der Broad-Cast Receiver, der über Telefonate informiert wird:
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);
        }

    }
}
Und schließlich die Dialog-Activity:
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();
    }
}
 

Anhänge

  • CallBack.zip
    1,5 MB · Aufrufe: 120
  • CallBack.apk
    659,1 KB · Aufrufe: 145
  • Danke
Reaktionen: OpamitKruecke

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
M
Antworten
2
Aufrufe
631
Mozart40
M
R
  • Robby1950
2
Antworten
23
Aufrufe
1.022
Robby1950
R
Zurück
Oben Unten