2016-10-03 72 views
1

我一直在嘗試測試我的應用程序,在其中實現G +登錄並且在Android Studio的模擬器中運行應用程序時但表示我需要更新Google Play服務。當我想用真實設備測試我的應用程序時,應用程序無法啓動

我一直在努力做到這一點,所以我認爲我只是測試它在真實的設備上,但是當我做這個應用程序不啓動/運行。當我轉到設備上的設置和應用程序時,我可以看到該應用程序已安裝,但未顯示在應用程序抽屜或其他任何地方。

我得到我的運行選項卡下此異常左下角:

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.madchallenge2016edwindaniel.upbirdwatchers/.LoginActivity } from null (pid=20620, uid=2000) not exported from uid 10154 
    at android.os.Parcel.readException(Parcel.java:1425) 
    at android.os.Parcel.readException(Parcel.java:1379) 
    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1948) 
    at com.android.commands.am.Am.runStart(Am.java:463) 
    at com.android.commands.am.Am.run(Am.java:108) 
    at com.android.commands.am.Am.main(Am.java:81) 
    at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) 
    at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:276) 
    at dalvik.system.NativeStart.main(Native Method) 

這裏是我的清單:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" 
     android:theme="@style/AppTheme.NoActionBar" /> 
<intent-filter > 
     <action android:name="android.intent.action.MAIN"/> 
     <category android:name="android.intent.category.LAUNCHER"/> 
    </intent-filter> 
    <activity android:name=".RegisterActivity" /> 
    <activity android:name=".LoginActivity" /> 
</application> 

這裏我的啓動行爲的代碼ivity:

package com.madchallenge2016edwindaniel.upbirdwatchers; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

import com.google.android.gms.auth.api.Auth; 
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; 
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; 
import com.google.android.gms.auth.api.signin.GoogleSignInResult; 
import com.google.android.gms.common.SignInButton; 
import com.google.android.gms.common.api.GoogleApiClient; 
import android.view.View; 
import com.google.android.gms.common.ConnectionResult; 

public class LoginActivity extends AppCompatActivity implements 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener{ 

    private GoogleApiClient mGoogleApiClient; 
    private SignInButton mSignInButton; 
    private static final int RC_SIGN_IN = 9001; 

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



     //Background 
     getWindow().setBackgroundDrawableResource(R.drawable.login_background); 

     // Configure sign-in to request the user's ID, email address, and basic 
     // profile. ID and basic profile are included in DEFAULT_SIGN_IN. 
     GoogleSignInOptions gso = new  GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .build(); 

    // Build a GoogleApiClient with access to the Google Sign-In API and the 
    // options specified by gso. 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 
    SignInButton mSignInButton = (SignInButton)findViewById(R.id.sign_in_button); 
    mSignInButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      switch (v.getId()) { 
       case R.id.sign_in_button: 
        signIn(); 
        break; 
       // ... 
      } 
     } 
    }); 
} 

//Start sign in 
private void signIn() { 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_SIGN_IN); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
    if (requestCode == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     handleSignInResult(result); 
    } 


} 

private void handleSignInResult(GoogleSignInResult result) { 

    if (result.isSuccess()) { 



    } else { 
     // Signed out, show unauthenticated UI. 
     // updateUI(false); 
    } 
} 

@Override 
public void onConnected(Bundle bundle) { 

} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 

} 

public void setmSignInButton(SignInButton mSignInButton) { 
    this.mSignInButton = mSignInButton; 
} 
} 

根據我得到的答案編輯我的清單文件後,我的應用程序現在運行。 這是我更新的清單文件看起來像:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".LoginActivity" 
     android:exported="true"> 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity android:name=".RegisterActivity" /> 
    <activity android:name=".MainActivity" 
     android:label="@string/title_activity_main" 
     android:theme="@style/AppTheme.NoActionBar"/> 
</application> 

+0

當然你嘗試了所有的解決方案,可以找到*沒有從uid *出口? – Selvin

回答

0

您在Android清單

錯過意圖過濾器,請更換您的清單與下面的代碼...

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:exported="true" 
     android:label="@string/title_activity_main" 
     android:theme="@style/AppTheme.NoActionBar" > 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    <activity android:name=".RegisterActivity" /> 
    <activity android:name=".LoginActivity" /> 
</application> 

意圖過濾器顯示何時啓動此活動。通常情況下,您將擁有一個具有意向過濾器的活動,以顯示它是啓動應用程序時的第一個活動。

+0

我仍然得到同樣的結果,即使加上意圖過濾 – DanBalzeer

+0

PLSE檢查我的編輯答案 –

+0

後,我有加的android:在活動出口=「真」 –

相關問題