user permission

  • 11 Antworten
  • Neuester Beitrag
Diskutiere user permission im Android App Entwicklung im Bereich Android OS.
P

PaulHerfter

Neues Mitglied
Nun ich dachte mir das Forum ist doch bestimmt voll von anfragen, wie das mit den user permission so läuft, denn das ist ja immer ein leidiges Thema. Vor allem bei Versionswechesel von Android. Also unter 10 habe ich festgestellt hat sich einiges geändert. bei mir funktioniert leider nix mehr. hier mal meine Manifest und mein JavaCode der MainActivity und Logfile. Also ich bekomme keinen Zugriff aufs Netz, meine Annahme die App erhält keine Rechte, ich mach Fehler bei der Implementierung. logisch bin ich der, der Fehler macht :)
XML:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.paul.youresaypaperwork">
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:testOnly="false">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest
hier wird noch mal der User gefragt. ob er die Rechte vergeben will.
Java:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
            if (ActivityCompat.checkSelfPermission(activity.getApplicationContext(),permission )!= PackageManager.PERMISSION_GRANTED) {
                activity.requestPermissions(new String[]{permission}, 1);
                return false;
            }
        return true;
Kommt aber immer bei true raus. Das kann ja nicht sein.
Und in der MainActivity
protected void onCreate(Bundle savedInstanceState) {

permissionCheck = AndroidToolbox.checkPermission(MainActivity.this, Manifest.permission.INTERNET);
//1stWe try to Create a SSHTunnel
if (permissionCheck) {
createSSHConnection();
}
 
Zuletzt bearbeitet:
D

deek

Stammgast
Internet permission hast du implizit, da muss der User nicht zustimmen. D.h. es läuft irgendwas anderes schief bei dir. Gibt es keine Meldung im Logcat?
 
P

PaulHerfter

Neues Mitglied
Leider nein. Ich werde aber nachher alles Mal hier reinwerfen was ich habe. Schlau werde ich daraus nur leider nicht. Darum wollte ich das Forum nicht damit zumüllen
Beitrag automatisch zusammengefügt:

PaulHerfter schrieb:
Leider nein. Ich werde aber nachher alles Mal hier reinwerfen was ich habe. Schlau werde ich daraus nur leider nicht. Darum wollte ich das Forum damit nichtz umüllen
Beitrag automatisch zusammengefügt:

PaulHerfter schrieb:
Leider nein. Ich werde aber nachher alles Mal hier reinwerfen was ich habe. Schlau werde ich daraus nur leider nicht. Darum wollte ich das Forum damit nichtz umüllen
Beitrag automatisch zusammengefügt:

XML:
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at ch.ethz.ssh2.transport.TransportManager.establishConnection(TransportManager.java:340)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at ch.ethz.ssh2.transport.TransportManager.initialize(TransportManager.java:448)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at ch.ethz.ssh2.Connection.connect(Connection.java:643)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at ch.ethz.ssh2.Connection.connect(Connection.java:490)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at com.paul.youresaypaperwork.SSHUserOBJ.getAuthenticateWithPassword(SSHUserOBJ.java:91)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at com.paul.youresaypaperwork.MainActivity.createSSHConnection(MainActivity.java:154)
2020-04-04 17:57:02.429 15627-15627/? E/com.paul.youresaypaperwork.SSHUserOBJ : SSH: Exeption by authentication nullcom.paul.youresaypaperwork.SSHUserOBJ
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at ch.ethz.ssh2.transport.TransportManager.establishConnection(TransportManager.java:340)
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at ch.ethz.ssh2.transport.TransportManager.initialize(TransportManager.java:448)
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at ch.ethz.ssh2.Connection.connect(Connection.java:643)
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at ch.ethz.ssh2.Connection.connect(Connection.java:490)
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at com.paul.youresaypaperwork.SSHUserOBJ.getAuthenticateWithPassword(SSHUserOBJ.java:91)
2020-04-04 17:57:02.687 15627-15627/? E/com.paul.youresaypaperwork.SSHUserOBJ : SSH: Exeption by authentication nullcom.paul.youresaypaperwork.SSHUserOBJ
Java:
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at ch.ethz.ssh2.transport.TransportManager.establishConnection(TransportManager.java:340)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at ch.ethz.ssh2.transport.TransportManager.initialize(TransportManager.java:448)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at ch.ethz.ssh2.Connection.connect(Connection.java:643)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at ch.ethz.ssh2.Connection.connect(Connection.java:490)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at com.paul.youresaypaperwork.SSHUserOBJ.getAuthenticateWithPassword(SSHUserOBJ.java:91)
2020-04-04 17:57:02.428 15627-15627/? W/System.err:     at com.paul.youresaypaperwork.MainActivity.createSSHConnection(MainActivity.java:154)
2020-04-04 17:57:02.429 15627-15627/? E/com.paul.youresaypaperwork.SSHUserOBJ : SSH: Exeption by authentication nullcom.paul.youresaypaperwork.SSHUserOBJ
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at ch.ethz.ssh2.transport.TransportManager.establishConnection(TransportManager.java:340)
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at ch.ethz.ssh2.transport.TransportManager.initialize(TransportManager.java:448)
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at ch.ethz.ssh2.Connection.connect(Connection.java:643)
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at ch.ethz.ssh2.Connection.connect(Connection.java:490)
2020-04-04 17:57:02.686 15627-15627/? W/System.err:     at com.paul.youresaypaperwork.SSHUserOBJ.getAuthenticateWithPassword(SSHUserOBJ.java:91)
2020-04-04 17:57:02.687 15627-15627/? E/com.paul.youresaypaperwork.SSHUserOBJ : SSH: Exeption by authentication nullcom.paul.youresaypaperwork.SSHUserOBJ
LogCatStuff
Beitrag automatisch zusammengefügt:

PaulHerfter schrieb:
ch.ethz.ssh2.Connection.connect(Connection.java:643)
genau hier ist die Stelle. Also es wird versucht auf meinen SSH-Server zu zugreifen da kommt diese
Exeption at ch.ethz.ssh2.Connection.connect(Connection.java:643).
Java:
 Die wird in der Methode hier im SSHUserObj geworfen. OK das sie ein Boolean als ReturnValue liefert ist wirklich hässlich. Besser waere wohl ein SSHConnection oder wenigstens ein SSH Session. Das baue ich aber noch um, sobald das hier läuft.
public boolean getAuthenticateWithPassword() {


    try {


        Connection conn = new Connection(getHost());

      conn.connect(); Danach wird versucht ein Conection aufzubauen. Das handelt alles das Framework. Das hier ist ein CopyPaste aus den Examples-Basic. :cool:

Dann noch kurz geprüft wurden auch alle notwendigen werte versorgt.

 (getHost() == null){

    throw new IOException("STOP NO SSHOST");

}

if (getUserName() == null){

    throw new IOException("STOP NO SSHUSERNAME");

}

Beim PortForwarding werde ich mit Zertifikate Arbeiten und nicht mit Username und Password ist ja klar.


boolean isAuthenticated = conn.authenticateWithPassword(getUserName(), getPassWord());

conn.authenticateWithPassword(getUserName(), getPassWord());

Session sess = conn.openSession();

setSession(sess);

Das ist abgehangener code, der funktioniert bei anderen Apps, das habe ich getestet.
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
Hallo

Also Internet Permission reicht es im Manifes“t zusetzen gehört nicht zu Dangerous Permission.

Diese solltest du auch aus dem Array „permission“ entfernen wenn es dort vorhanden ist.

Zeige doch mal wie du den Zugriff machst der Fehler wird wohl dort Ligen nicht bei den Permission.



PS. bitte Poste nicht alles doppelt.
Man hatte dir auch gesagt das du nicht alles in den Code Block legen sollst. Code Ja.
Ein Zitat unter Zitat und dein Text einfach so. Bei deinen Post sieht keiner durch.
Zitat unter den drei Punkten Zitat „
 
Zuletzt bearbeitet:
P

PaulHerfter

Neues Mitglied
Ich hoffe ja mal, das ich das im Laufe der Zeit geregelt bekomme mit meinen Posts.
Bedenke bitte, das ich derzeit mit der Chemo zu kaempfen habe und dann schnell mal den falschen Klick setzte. Das ist keine Absicht.
Also den Zugriff mache ich genauso wie er in den Samples des Frameworks Ganymed gezeigt wird.

boolean isAuthenticated = conn.authenticateWithPassword(username, password);
Java:
public synchronized boolean authenticateWithPassword(String user, String password) throws IOException {
        if (this.tm == null) {
            throw new IllegalStateException("Connection is not established!");
        } else if (this.authenticated) {
            throw new IllegalStateException("Connection is already authenticated!");
        } else {
            if (this.am == null) {
                this.am = new AuthenticationManager(this.tm);
            }

            if (this.cm == null) {
                this.cm = new ChannelManager(this.tm);
            }

            if (user == null) {
                throw new IllegalArgumentException("user argument is null");
            } else if (password == null) {
                throw new IllegalArgumentException("password argument is null");
            } else {
                this.authenticated = this.am.authenticatePassword(user, password);
                return this.authenticated;
            }
        }
    }
Java:
public boolean getAuthenticateWithPassword() {

        try {
            Connection conn = new Connection(getHost());
            conn.connect();
            /* Authenticate.
             * If you get an IOException saying something like
             * "Authentication method password not supported by the server at this stage."
             * then please check the FAQ.
             */if (getHost() == null){
                throw new IOException("STOP NO SSHOST");
            }
            if (getUserName() == null){
                throw new IOException("STOP NO SSHUSERNAME");
            }
            if (getPassWord() == null){
                throw new IOException("STOP NO SSHPASSWORD");
            }
            boolean isAuthenticated = conn.authenticateWithPassword(getUserName(), getPassWord());

          //  conn.authenticateWithPassword(getUserName(),getPassWord(),getTunnelLocalPort());
            Session sess = conn.openSession();
            setSession(sess);

        } catch (Exception exp) {
            exp.printStackTrace();
            AndroidToolbox.printLogFile(getClass().getCanonicalName(),"SSH ","Exeption by authentication : "+" ....>  "+exp.getLocalizedMessage()+getClass().getCanonicalName(),AndroidToolbox.LOGFILE_TYPE_ERROR);
            return false;
        }
        return true;
    }
Das hier ist die Methode aus der MainActivity die verhält sich genau so, wie die Example des Frameworks.
Beitrag automatisch zusammengefügt:

jogimuc schrieb:
Hallo

Also Internet Permission reicht es im Manifes“t zusetzen gehört nicht zu Dangerous Permission.

Diese solltest du auch aus dem Array „permission“ entfernen wenn es dort vorhanden ist.

Zeige doch mal wie du den Zugriff machst der Fehler wird wohl dort Ligen nicht bei den Permission.



PS. bitte Poste nicht alles doppelt.
Wenn ich es vermeiden kann. natürlich nicht. Leider der dicke Finger und der Browser auf dem Smartphone. :)

Man hatte dir auch gesagt das du nicht alles in den Code Block legen sollst. Code Ja.
Ein Zitat unter Zitat und dein Text einfach so. Bei deinen Post sieht keiner durch.
Zitat unter den drei Punkten Zitat „
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
Hallo
Das wird so in Android nicht gehen. Das Framework von dem du sprichst ist für Java Desktop PC.
"Frameworks Ganymed"
 
Zuletzt bearbeitet:
P

PaulHerfter

Neues Mitglied
OK
jogimuc schrieb:
Hallo
Das wird so in Android nicht gehen. Das Framework von dem du sprichst ist für Java Desktop PC.
"Frameworks Ganymed"
@jogimuc Ich bilde mir ein, dass ich das Framework in der Vergangenheit in ein paar Apps genutzt habe. Hoffentlich finde ich morgen auch den pasen den passenden Code dazu .Hast du einen Link fuer mich , wo das beschrieben ist? Denn diese Erkenntnis neu für mich. Warum sollte das denn unter Android nicht gehen ?
 
P

PaulHerfter

Neues Mitglied
@jogimuc hier
Java:
ackage com.paul.flipperb2b.tasks;
/*
 * created 19.10.2013 by Wolfgang
 * Start the SSH Tunneling, in a async Task.
 */

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

import com.paul.flipperb2b.db.DBStartOBJ;
import com.paul.flipperb2b.db.netModellObj.FlipperAppObj;
import com.paul.flipperb2b.db.netModellObj.UserSSHObject;
import com.paul.flipperb2b.main.MainActivity;
import com.paul.flipperb2b.net.SSHStuff;
import com.paul.flipperb2b.services.FlipperAccountDispatcher;
import com.paul.flipperb2b.tools.AndroidToolBox;

import ch.ethz.ssh2.Connection;

public class StartSSHAndDBAsyncTask extends AsyncTask<Context, Void, Context> {
    private static UserSSHObject userSSHObj;
    public static Connection sshConnection;
    private static int sshPort=4711;
    public static DBStartOBJ dbStartOB = new DBStartOBJ();
    
    
    public static DBStartOBJ getDbStartOB() {
        return dbStartOB;
    }
    public void setDbStartOB(DBStartOBJ dbStartOB) {
        StartSSHAndDBAsyncTask.dbStartOB = dbStartOB;
    }
    public Connection getSshConnection() {
        return sshConnection;
    }
    public static void setSshConnection(Connection sshConnection) {
        StartSSHAndDBAsyncTask.sshConnection = sshConnection;
    }
    public int getSshPort() {
        return sshPort;
    }
    public void setSshPort(int sshPortparam) {
        StartSSHAndDBAsyncTask.sshPort = sshPortparam;
    }
    @Override
    protected Context doInBackground(Context... arg0) {
        try {
            startSSHTunnel(arg0[0]);
        } catch (Exception e) {
            AndroidToolBox.printLogFile(getClass().getCanonicalName(), "Exeption by Start SSH ", e.getLocalizedMessage(), 1);
            e.printStackTrace();
        }
            
        return arg0[0];
    }
     @Override
        protected void onProgressUpdate(Void...arg0) {
         Log.v("Flipper Status in Activity ",getStatus().toString());
        }
    @Override
    protected void onPostExecute(Context context) {
        FlipperAccountDispatcher flipperAcntDsp = new FlipperAccountDispatcher();
        try {
            flipperAcntDsp.handleFlipperUserAccountForPG_DB(context);
        } catch (Exception e) {
            AndroidToolBox.printLogFile(getClass().getCanonicalName(),
                    "Error by onPostExecute", e.getLocalizedMessage(), 1);
        }
        
     }

    @Override
    protected void onCancelled() {   
        super.onCancelled();
        try {
            closeConnection();
        } catch (Exception e) {
            AndroidToolBox.printLogFile(getClass().getCanonicalName(), "Error by AsyncTask onCacceled. Close", e.getLocalizedMessage(), 1);
            if (FlipperAppObj.isDeveloperMode) {
                e.printStackTrace();
                AndroidToolBox.startCrashReportActivity(MainActivity.activityOwn);
            }
        }
    }
    @SuppressWarnings("static-access")
    public static void startSSHTunnel(Context context) throws Exception {
        if (sshConnection != null)
            sshConnection.close();
        if (userSSHObj == null) {
            setNetUserOb();
        }
        
        SSHStuff sshStuff = new SSHStuff(userSSHObj);
        sshStuff.setTunnelPortTarget(sshPort);
        if (sshStuff.start()) {
            setSshConnection(sshStuff.getConn());
            //if (DBStartOBJ.glbCon.isClosed()) {
                getDbStartOB().openDB(true);
                //at last, check have the user a account on the pgDB.
                DBStartOBJ.glbCon = getDbStartOB().glbCon;
            //}
        }
    }
    //TODO get the datas from DAtabase
    private static void setNetUserOb () {
        if(userSSHObj == null)
            userSSHObj = new UserSSHObject();
        userSSHObj.setHost("85.25.199.7");
        userSSHObj.setUserName("flipperSSH");
        userSSHObj.setPassWord("decubitus4711");
        userSSHObj.setTunnelLocalPort(5432);
    }
    public  void closeConnection () throws Exception {
        if (getSshConnection() !=null)
            getSshConnection().close();
        DBStartOBJ.glbCon.close();
        AndroidToolBox.printLogFile(getClass().getCanonicalName(),"SSH connection Status: ", "close", 0);
    }
    
}
Hier der Code den ich gefunden habe, der funktionierte mal. Ist schon eine Weile her wichtig scheint der Asynctask zu sein fuer das Framework.
 
P

PaulHerfter

Neues Mitglied
Also ich habe diesen Code gerade in meine App reingefummelt und der läuft. :)
Beitrag automatisch zusammengefügt:

Ok es gibt zwar noch ein paar Fehlermeldungen, aber immerhin baut er eine Verbindung zum SSHServer auf. :)
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
OK
Bei Internet Verbindungen ist es immer sinnvoll das nicht im UI zu machen. Ob das nun ein Asynctask oder ein Thread ist ist eigentlich nicht so entscheidend.

Hauptsache es geht.
 
Zuletzt bearbeitet:
P

PaulHerfter

Neues Mitglied
@jogimuc Genau so ist es, Hauptsache es läuft.
 
P

PaulHerfter

Neues Mitglied
Ich bin so happy uname -a durch den TunnelScreenshot_20200408-123226.png