2016-09-17 41 views
0

我想從系統對話框中得到結果。意味着我無法控制的對話。方法onActivityResult不會被調用,當被調用的resultCode總是爲零

我的onCreate方法:

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

    //Floating Action Button for uninstalling applications 
    fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      for(int i = 0; i < checkValues.length; i++) 
      { 
       //Uninstall any true values 
       if(checkValues[i] == 1) 
       { 
        String appName = AppContent.getItem(i).pkgName; 

        Uri packageUri = Uri.parse("package:"+ appName); 
        Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri); 
        startActivity(uninstallIntent); 
       } 
      } 
     } 
    }); 

    //Disappear the button until the user makes a selection. 
    fab.setVisibility(View.INVISIBLE); 
} 

我onActivityResult方法:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    System.out.println("ACTIVITY RESULT : " + resultCode + " ----- ACTIVITY REQUEST CODE : " + requestCode); 

} 

的想法是,一旦意圖啓動和用戶提供卸載該應用或取消卸載的選擇,onActivityResult會根據resultCode整數給我們他們的選擇。

我遇到的問題是onActivityResult永遠不會被調用。我試圖通過使用固定這個問題:

MainActivity.this.startActivity(intent) 
context.startActivity(intent) 

我雖然,我的問題是,從一個匿名類調用它沒有觸發onActivityResult方法,但即使失敗。然後我用

startActivityForResult(intent, anyNumberHere) 

這實際上觸發了onActivityResult方法試過了,但是resultCode爲參數始終是零。用戶點擊取消或卸載並不重要。這對我沒有幫助,因爲我需要知道他們的選擇,所以我可以根據它執行更多的代碼。

我讀過關於這個問題的文章,並且有不少人遇到了AndroidManifest.xml文件中的設置問題,所以我在這裏發佈我的文章以及完整性。

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="app.app.app" 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools"> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" 
     tools:replace="android:icon,android:theme"> 

     <activity android:name=".SplashScreen"> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 

      </intent-filter> 
     </activity> 
     <activity android:name=".MainActivity"> 

     </activity> 
    </application> 

</manifest> 

關於如何解決這個問題的任何想法?

+0

參考http://stackoverflow.com/questions/27358672/unistall -android-application-programmatically – sasikumar

+0

我的意圖完美的工作。我遇到的問題是,我從onActivityResult獲得的resultCode始終爲零。這意味着我不知道用戶是否選擇取消或卸載應用程序。 – exc414

回答

0

污穢類變量

int UNINSTALL_REQUEST = 111 // or any number. 

開始您的活動像這樣

startActivityForResult(uninstallIntent, UNINSTALL_REQUEST); 

和活動

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    System.out.println("ACTIVITY RESULT : " + resultCode + " ----- ACTIVITY REQUEST CODE : " + requestCode); 
    // request code should be same as UNINSTALL_REQUEST to confirm method is called for which activity. 

} 
+0

我已經這樣做了。雖然這確實解決了onActivityResult未得到調用的問題,但它無法解決resultCode依然爲零的事實,無論用戶是否選擇取消或卸載應用程序。因此,我無法獲得所需的信息,即知道他們是否選擇取消或卸載。 – exc414