मैं एक ऐसी सेवा तैयार कर रहा हूं जो एंड्रॉइड टीवी या फायर टीवी से इंस्टॉल किए गए ऐप्स की एक मोबाइल फोन पर भेजता है। फोन फिर ऐप के पैकेज नाम को वापस भेजता है जिसे वह लॉन्च करना चाहता है और सेवा इसे लॉन्च करती है।getLaunchIntentForPackage कुछ ऐप्स के लिए शून्य है
इस कोड है कि सूची बनाता है
public List<InstalledApp> GetInstalledApps(boolean isAndroid) {
PackageManager pm = getPackageManager();
List<ApplicationInfo> allPackages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
List<InstalledApp> userPackages = new ArrayList<InstalledApp>();
for (ApplicationInfo packageInfo : allPackages) {
if (isSystemPackage(packageInfo)) continue;
InstalledApp app = new InstalledApp();
app.setPackageName(packageInfo.packageName);
app.setAppName(pm.getApplicationLabel(packageInfo).toString());
if (!isAndroid) {
app.setIcon(pm.getApplicationIcon(packageInfo));
}
app.setAccentColor(getAccentColor(pm.getApplicationIcon(packageInfo)));
userPackages.add(app);
}
return userPackages;
}
यह मैं कैसे एप्लिकेशन लॉन्च
public void launchApp(String packageName) {
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(packageName);
startActivity(intent);
}
आग टीवी सब कुछ पर से कई के लिए पूरी तरह से है, लेकिन एंड्रॉयड टीवी पर आमादा काम करता है ऐप्स हमेशा शून्य है। ये तो बहुत कम हैं।
- com.haystack.android
- com.netflix.ninja
- tv.pluto.android
- com.bamnetworks.mlbtv
हालांकि एक ही कोड के साथ, इन एप्लिकेशन के काम बस ठीक।
- com.hulu.livingroomplus
- com.sling
- com.frogmind.badland
- com.songza.tv
किसी को भी मैं क्या कर रहा हो सकता है पर किसी भी अंतर्दृष्टि प्रदान कर सके गलत?
धन्यवाद!
संपादित करें: मैं भी इस की कोशिश की है और मैं अपवाद
android.content.ActivityNotFoundException प्राप्त कोई गतिविधि नहीं आशय {संभालने के लिए पाया बिल्ली = [android.intent.category.LEANBACK_LAUNCHER] FLG = 0x10000000 pkg = com.netflix.ninja}
public void launchApp(String packageName) {
Intent intent = new Intent();
intent.setPackage(packageName);
intent.addCategory("android.intent.category.LEANBACK_LAUNCHER");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
संपादित करें 2:
इस कोड है कि मेरे लिए काम करता है :
public void launchApp(String packageName) {
Intent intent = new Intent();
intent.setPackage(packageName);
PackageManager pm = getPackageManager();
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
Collections.sort(resolveInfos, new ResolveInfo.DisplayNameComparator(pm));
if(resolveInfos.size() > 0) {
ResolveInfo launchable = resolveInfos.get(0);
ActivityInfo activity = launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName,
activity.name);
Intent i=new Intent(Intent.ACTION_MAIN);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivity(i);
}
}
ध्यान रखें कि एंड्रॉइड टीवी पर, 'LEANBACK_LAUNCHER' लांचर की बजाय लॉन्चर की श्रेणी है, क्योंकि यह फोन और टैबलेट पर है। मेरा अनुमान है कि उन ऐप्स में 'लॉन्चर' गतिविधि नहीं है और 'getLaunchIntentForPackage() 'केवल' LAUNCHER' के लिए काम करता है, न कि 'LEANBACK_LAUNCHER'। – CommonsWare
मैंने इरादे के लिए मैन्युअल रूप से पैकेज नाम सेट करने और 'android.intent.category.LEANBACK_LAUNCHER' श्रेणी जोड़ने की कोशिश की लेकिन यह अभी भी काम नहीं करता है। मुझे यकीन है कि नेटफ्लिक्स में 'LEANBACK_LAUNCHER' है। यदि यह मायने रखता है तो मैं एसडीके संस्करण 17-21 को लक्षित कर रहा हूं। –
"मैंने इरादे के लिए पैकेज नाम सेट करने और android.intent.category.LEANBACK_LAUNCHER श्रेणी जोड़ने की कोशिश की लेकिन यह अभी भी काम नहीं करता है" - मुझे नहीं पता कि आपके मौजूदा कोड के संदर्भ में इसका मतलब क्या है । सभी 'LEANBACK_LAUNCHER' गतिविधियों को खोजने के लिए 'queryIntentActivities()' का उपयोग करने के लिए आपका स्वागत है। वह (हालांकि 'लांचर' के साथ) होम स्क्रीन क्या करती है, 'getLaunchIntentForPackage() 'का उपयोग न करें)। होम स्क्रीन-स्टाइल लॉन्चर का एक उदाहरण यहां दिया गया है: https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/Launchalot – CommonsWare