Einen Anruf per App auflegen.

  • Antworten:7
Berstanio
  • Forum-Beiträge: 4

02.04.2017, 16:35:57 via Website

Hallo
Ich programmiere gerade eine App die einen Anrufen soll und nach 30 Sekunden auflegen. Bloß ich kriege das Auflegen nicht hin und alle ansätze aus dem Internet funktionieren nicht mehr. Ich würde mich sehr über eure Hilfe freuen.

Lg Berstanio

Antworten
swa00
  • Forum-Beiträge: 3.704

02.04.2017, 16:43:56 via Website

Hallo Berstanio,

wir bevorzugen bei Hilfestellung schon den Source und eine detaillierte Beschreibung , was
du bis jetzt schon umgesetzt hast

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Berstanio
  • Forum-Beiträge: 4

02.04.2017, 16:48:04 via Website

public class MainActivity extends AppCompatActivity {

    ArrayList<String> nummern = new ArrayList<>();
    ArrayList<String> gerufen = new ArrayList<>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    nummern.add("...");
    nummern.add("...");


    schleife();

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

   FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public void schleife(){
    for (String s: nummern) {
        if(!gerufen.contains(s)) {
            gerufen.add(s);
            countdown(s);
            break;
        }
    }
}

public void countdown(String s){
    Intent anrufIntent = new Intent(Intent.ACTION_CALL);

    anrufIntent.setData(Uri.parse("tel:" + s));
    if(ContextCompat.checkSelfPermission(getApplication().getApplicationContext(), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED){
        startActivityForResult(anrufIntent, 6);
    }

    new CountDownTimer(30000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            if (millisUntilFinished == 500){
                    // Hier sol der Anruf beendet werden
            }
        }

        @Override
        public void onFinish() {
            schleife();
            Log.d("H","Hhjsdahjadk");
        }
    };
}

}

Antworten
swa00
  • Forum-Beiträge: 3.704

02.04.2017, 16:50:53 via Website

und wo bitteschön fragst du den Status ab ?

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Berstanio
  • Forum-Beiträge: 4

02.04.2017, 16:58:49 via Website

Warum sollte ich? Er soll immer nach 30 Sekunden beendet werden.

— geändert am 02.04.2017, 17:00:33

Antworten
swa00
  • Forum-Beiträge: 3.704

02.04.2017, 17:04:20 via Website

Weil du Diesen zwingend benötigst.

Das was du da oben gebastelt hast, kann nicht funktionieren .. denn du kannst nicht einfach "Auflegen" ,
das musst du Statusabhängig tun und ist abhängig von den verschiedenen Versionen.

Hier der entsprechende "Lerntext"

https://developer.android.com/reference/android/telephony/TelephonyManager.html
.
.

P.S Wir bevorzugen auch ein "Hallo & Danke & Bitte" und nicht nur ein kommentarloses posten eines Codes.
Und erst recht nicht " Warum denn das ? - Brauch ich nicht !"

Wir können auch gerne aufhören, Dir zu antworten :-)

— geändert am 02.04.2017, 17:07:43

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.

Antworten
Berstanio
  • Forum-Beiträge: 4

02.04.2017, 17:17:42 via Website

Hallo swa00

Erstmal Danke für den Link. Trotzdem blicke ich nicht durch, wie ich mit dem TelephonyManager Anrufe beenden kann. Ich sehe dort keine Methode, die einen Anruf beendet.

P.S.Hallo hab ich doch zu anfang geschrieben und ich bedanke mich eigentlich nur, wenn mir jemand geholfen hat(oder es versucht hat). Ausserdem war das mit dem Warum sollte ich eher im sinne: Warum? Sollte ich? gemeint. Also als Frage.

Antworten
swa00
  • Forum-Beiträge: 3.704

02.04.2017, 17:26:03 via Website

Es kam aber alles ziemlich motzig an , weshalb ich mir erlaubt habe auch darauf hinzuweisen :-)

a) du brauchst erst mal eine Permission , die dann abhängig von Betriebssystem ist.
b) Legst du einfach so auf , also wenn z.b das DIng im Ruhezustand sein sollte, den Status verändert hat , der LifeCycle gegriffen hat etc etc , dann hast du ganz schnell einen Absturz .
c) die API (link) ist schon ziemlich erklärend, das ist die Basis , worauf wir Gurus aufbauen

Hier mal ein Beispiel, wie du den State - Listener einbindest..

EndCallListener callListener = new EndCallListener();
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);

Und in Diesem kannst du dann nach Status auflegen :

TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
Class clazz = Class.forName(telephonyManager.getClass().getName());
Method method = clazz.getDeclaredMethod("getITelephony");
method.setAccessible(true);
ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);
telephonyService.endCall();

Und wie oben schon beschrieben :

Die Permission müssen gesetzt werden

— geändert am 02.04.2017, 17:28:10

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.

Antworten