2015-12-11 40 views
0

我的應用程序中有兩個主要的類,用於啓動活動。在OnCreate()中調用MainActivity中的另一個類

MainActivity.Java

package com.connect; 

import android.app.Activity; 
import android.app.admin.DevicePolicyManager; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Toast; 

import java.io.IOException; 

public class MainActivity extends Activity { 

    private PolicyManager policyManager; 

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

     policyManager = new PolicyManager(this); 
     System.out.println("Hello"); 
     if (!policyManager.isAdminActive()) { 
      Intent activateDeviceAdmin = new Intent(
        DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
      activateDeviceAdmin.putExtra(
        DevicePolicyManager.EXTRA_DEVICE_ADMIN, 
        policyManager.getAdminComponent()); 
      activateDeviceAdmin 
        .putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, 
          "After activating admin, you will be able to block application uninstallation."); 
      startActivityForResult(activateDeviceAdmin, 
        PolicyManager.DPM_ACTIVATION_REQUEST_CODE); 
     } 
      } 

     @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     if (resultCode == Activity.RESULT_OK 
       && requestCode == PolicyManager.DPM_ACTIVATION_REQUEST_CODE) { 
      // handle code for successfull enable of admin 
     } else { 
      super.onActivityResult(requestCode, resultCode, data); 
     } 

    } 
} 

Droidian.java

package com.connect; 

import android.app.Activity; 
import android.app.ActivityManager; 
import android.app.ActivityManager.RunningServiceInfo; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.Toast; 

import java.io.IOException; 

public class Droidian extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     PackageManager i = getApplicationContext().getPackageManager(); 
     i.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

     if (isMyServiceRunning() == false) { 
      startService(new Intent(getApplicationContext(), DroidianService.class)); 
      Log.i("com.connect", "startService"); 
     } 
    } 

    private boolean isMyServiceRunning() { 
     ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); 
     for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if (DroidianService.class.getName().equals(service.service.getClassName())) { 
       return true; 
      } 
     } 
     return false; 
    } 

} 

執行MainActivity.java後,Droidian.java應該運行,因爲這是會做的類所有的功能。我不知道如何在MainActivity.java類中調用其他類。這是我的Manifest文件片段。

的Android的Manifest.xml

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

    <uses-sdk 
     android:minSdkVersion="10" 
     android:targetSdkVersion="18" tools:ignore="OldTargetApi"/> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

    <supports-screens android:resizeable="true" 
     android:largeScreens="true" 
     android:xlargeScreens="true" 
     /> 

    <application 
     android:allowBackup="false" 
     android:icon="@drawable/launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" 
     android:persistent="true"> 
     <activity 
      android:name="com.connect.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

     <receiver 
      android:name="com.connect.SampleDeviceAdminReceiver" 
      android:permission="android.permission.BIND_DEVICE_ADMIN" > 
      <meta-data 
       android:name="android.app.device_admin" 
       android:resource="@xml/device_admin" /> 

      <intent-filter> 
       <category android:name="android.intent.category.DEFAULT"/> 
       <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
       <action android:name="android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED" /> 
       <action android:name="android.app.action.DEVICE_ADMIN_DISABLED" /> 
      </intent-filter> 
     </receiver> 

     <activity 
      android:name="com.connect.Droidian" 
      android:excludeFromRecents="true"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

     </activity> 
+0

只需幾點說明:Android運行Java,但它與桌面不一樣JVM ......'System.out.println()'甚至可能未實現(或只是重定向到Log.d/i消息......另外,你說出你的問題的方式,似乎你不瞭解Activity的生命週期,[請閱讀此內容。](http://developer.android.com/training/basics/activity-lifecycle/index。 html) – Bonatti

回答

1

你不能聲明兩個活動發射器。將您的droidian活動更改爲DEFAULT。

<activity 
     android:name="com.connect.Droidian" 
     android:excludeFromRecents="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 

    </activity> 
+0

你可以,你會得到一個單獨的啓動器圖標 – laalto

+0

但在這裏它沒有用,因爲代碼調用onCreate方法的另一個類從「mainActivity」我特別引用了這個問題@ laalto –

0

添加到您的onCreate

Intent intent = new Intent(getApplicationContext(), Droidian.class); 
startActivity(intent); 
0

的幾個問題:
起初,有啓動的事情約傑什提及。意圖過濾器中的啓動器類別意味着,此活動是首先被調用的活動,因此只能存在一個啓動器。

如果你真的想讓Droidian成爲一個活動,這是不完全清楚的,因爲你明白地稱它爲一個類。它是要有自己的觀點,還是應該是一個工人階級?如果以後,不要擴展Activity,只需將它定義爲普通類。然後,您可以通過在MainActivity中實例化函數來調用函數,如Droidian mDroidian = new Droidian()或使您的函數保持靜態。

如果你真的打算使用一個Activity和'call onCreate',你必須啓動Activity。某些方法不能手動啓動,但在啓動活動後會自動調用,請參閱the Android reference on Activities,尤其是「活動生命週期」部分。
啓動一個活動將是

Intent intent = new Intent(MainActivity.this, Droidian.class); 
startActivity(intent); 

而且你可能想看看Android開發者的培訓,尤其是the one about starting an activity最簡單的方法。

相關問題