2012-06-14 27 views
8

Tôi đang cố bắt đầu hoạt động chính từ bên trong một BroadcastReceiver. Tôi không muốn cung cấp tên lớp hoạt động nhưng để sử dụng hành động và danh mục cho android để tìm ra hoạt động chính.Android Ý định bắt đầu Hoạt động chính của ứng dụng

Dường như nó không hoạt động.

Mã Sending:

Intent startIntent = new Intent(); 

startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startIntent.setAction(Intent.ACTION_MAIN); 
startIntent.setPackage(context.getPackageName()); 
startIntent.addCategory(Intent.CATEGORY_LAUNCHER);   
context.startActivity(startIntent); 

tôi nhận được lỗi này:

Caused bt: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.xyz.abc (has extras) }

Bất kỳ ý tưởng?

+0

Tại sao bạn không muốn để xác định các hoạt động chính thực tế theo tên? –

+1

@Austyn Để sử dụng mã trong thư viện chẳng hạn. – Pataar

Trả lời

7

đây không phải là cách đúng để bắt đầuKích hoạt.
thử mã này thay vì:

Intent startIntent = new Intent(context, MainActivity.class); 
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
context.startActivity(startIntent); 
+0

Tôi chỉ có ngữ cảnh của ứng dụng thay vì MainActivity.class trong dự án thư viện. Làm thế nào tôi có thể bắt đầu hoạt động chính của ứng dụng từ dự án thư viện. – Karthick

+0

@Karthick: không có vấn đề gì khi sử dụng ngữ cảnh ứng dụng thay vì MainActivity.class, nhưng - nếu bạn không sử dụng cờ Intent.FLAG_ACTIVITY_NEW_TASK, bạn sẽ nhận được một ngoại lệ trong trường hợp đó, bởi vì bắt đầu hoạt động từ ngữ cảnh ứng dụng/dịch vụ yêu cầu lá cờ này. –

+0

Nếu tôi đang sử dụng ngữ cảnh, Tôi có thể sử dụng như thế nào? Intent notificationIntent = new Intent (ngữ cảnh, (Hoạt động) (PushNotification.mActiveContext)); nhận được lỗi. Tôi cần điều này trong kịch bản liên kết dưới đây. http://stackoverflow.com/questions/18843118/launch-android-application-from-library-project – Karthick

1

Thậm chí tôi đã cố gắng để khởi động MainActivity qua Hoạt động thư viện.

Và điều này đã làm việc cho tôi:

Intent startIntent = new Intent(); 
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startIntent.setPackage(getApplicationContext().getPackageName()); 
getApplicationContext().startActivity(startIntent); 

Hãy chắc chắn rằng bạn thêm hoạt động trong manifest của thư viện của bạn!

+0

Và đây là ngoại lệ khi tôi cố gắng như cũ: android.content.ActivityNotFoundException: Không tìm thấy hoạt động nào để xử lý Intent – TienLuong

4

Copy từ một chủ đề khác:

này hoạt động từ năm API Level 3 (Android 1.5):

private void startMainActivity(Context context) throws NameNotFoundException { 
    PackageManager pm = context.getPackageManager(); 
    Intent intent = pm.getLaunchIntentForPackage(context.getPackageName()); 
    context.startActivity(intent); 
} 
Các vấn đề liên quan