2016-09-17 76 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